Використання ehlib у режимі TreeView

Здрастуйте ! Намагаюся використовувати ehlib 4 в режимі дерева. У документації написано: “При появі нового запису, MemTable намагається знайти для неї Parent запис, здійснюючи пошук записів, у яких значення поля KeyFieldName дорівнює значенню поля RefParentFieldName нового запису.”

А ось на такому наборі даних формується помилка KeyFieldName RefParentFieldName nameNode --------------------------------- ------------------------------ 1 1 parent 1 0 1 child 1 of parent 1 0 1 child 2 of parent 1 2 2 parent 2 0 2 child 1 of parent 2 0 2 child 2 of parent 2 0 2 child 3 of parent 2

Використовується зв'язка DBGridEh-DataSource-MemTableEh-DataDriverEh-DataSet. Як DataSet виступає процедура mssqlServer2000, що зберігається. У delphi7 призначені властивості:

MemTable.TreeList.KeyFieldName := "KeyFieldName"; MemTable.TreeList.RefParentFieldName := "RefParentFieldName"; MemTable.TreeList.DefaultNodeExpanded := false; MemTable.TreeList 1>MemTable.Active := true; MemTable.TreeList.Active := true; // here is error

Начебто все правильно. Що я не зрозумів ?

вибачаюсь, не сказав якась помилка. Формується помилка “Reference-loop found.

сам собі батько? Н.д., ІМХО, повинен бути видуKeyFieldName RefParentFieldName nameNode ------------------------ --------------------------------------- 1 0 parent 1 2 1 child 1 of parent 1 3 1 child 2 of parent 1 4 0 parent 2 5 4 child 1 of parent 2 6 4 child 2 of parent 2 7 4 child 3 of parent 2

ЮЮ! Дякую. Ось що означає свіжий погляд. Для першого рядка я чомусь не звертав уваги на значення поля RefParentFieldName. Після змін все поїхало.

> Для першого рядка я чомусь не звертав уваги на значення > поля RefParentFieldName

А для наступних – не звертав уваги на значення поля KeyFieldName? :)

ЮЮ! Щось сьогодні я дуже неакуратний. Ну, дерево нарешті вийшло. Але не можу впоратися з такою функціональністю: потрібно відобразити дані однієї колонки кілька рядків. Якщо використовувати

aDBGr >aDBGr > то висота рядків встановлюється для всіх рядків. А потрібно лише для деяких, - для Parent вузлів aDBGr >Написав aDBGr >але ефект не отримав.

Ось мої безрезультатні спроби: // aDBGr >aDBGr >aDBGr >aDBGr >aDBGr > Можливо, TDBGridEh не дозволяє це зробити ?

У TDBGrid-е всі рядки за визначенням повинні бути однієї висоти, на відміну від TDraw(String)Grid, тому що у нього не стільки рядків, скільки записів в наборі даних, а стільки, скільки можна побачити на екрані за один раз. Адже при скролюванні DataSet-а в одному і тому ж рядку може виявитися запис, для якої потрібна висота в 1 рядок, то та, для якої потрібна 2. Можна в OnDrawCell обчислити необхідну висоту рядка і змінити protected у TDBGrid RowHeights, тільки обережно, щоб у Stack Overflow не влетіти :).

ЮЮ ! Ви маєте на увазі TCustomGrid(. ).RowHeights[Index] ? Дякую спробую. У help написано: "Set RowWidths at runtime to change the height of an individual row."