Використання 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."