Използване на ehlib в TreeView

Здравейте! Опитвам се да използвам ehlib 4 в дървовиден режим. В документацията се казва: „Когато се появи нов запис, MemTable се опитва да намери родителски запис за него, като търси записи, чиято стойност на полето KeyFieldName е равна на стойността на полето RefParentFieldName на новия запис.“

Но при такъв набор от данни се генерира грешка KeyFieldName RefParentFieldName nameNode -------------------------------------------------------------------------- 1 1 родител 1 0 1 дете 1 на родител 1 0 1 дете 2 на родител 1 2 2 родител 2 0 2 дете 1 на родител 2 0 2 дете 2 на родител 2 0 2 дете 3 на родител 2

Използва се обвързването DBGridEh-DataSource-MemTableEh-DataDriverEh-DataSet. Съхранената процедура mssqlServer2000 действа като DataSet. Свойствата се присвояват в delphi7:

MemTable.TreeList.KeyFieldName := "KeyFieldName"; MemTable.TreeList.RefParentFieldName := "RefParentFieldName"; MemTable.TreeList.DefaultNodeExpanded := false; MemTable.TreeList.FullBuildCheck := true ; MemTable.Active := true; MemTable.TreeList.Active := true; // тук има грешка

Всичко изглежда правилно. Какво не разбрах?

Съжалявам, не казах каква е грешката. Грешката „Reference-loop found.

собственият ти родител? N.d., IMHO, трябва да бъде във форматаKeyFieldName RefParentFieldName nameNode -------------------------------------------------------------------------- 1 0 родител 1 2 1 дете 1 на родител 1 3 1 дете 2 на родител 1 4 0 родител 2 5 4 дете 1 на родител 2 6 4 дете 2 на родител 2 7 4 дете 3 на родител 2

Юю! Благодаря ви. Ето какво означава свеж вид. За 1-ви ред по някаква причина не обърнах внимание на стойността на полето RefParentFieldName. След промените всичко мина.

> За 1-ви ред по някаква причина не обърнах внимание на стойността > полета RefParentFieldName

А за следващите - не обърнахте внимание на стойността на полето KeyFieldName? :)

Юю! Нещо днес съм много мърляв. Е, дървото най-накрая излезе. Но не мога да се справя с такава функционалност: трябва да покажа данните от една колона в няколко реда. Ако използвате

aDBGr >aDBGr > тогава височината на реда се задава за всички редове. Но само за някои, - за родителски възли aDBGr >Написа aDBGr >но няма ефект.

Ето моите неуспешни опити: // aDBGr >aDBGr >aDBGr >aDBGr >aDBGr > Може би TDBGridEh не позволява това?

В TDBGrid, по дефиниция, всички редове трябва да са с еднаква височина, за разлика от TDraw(String)Grid, тъй като той няма толкова редове, колкото са записите в показания набор от данни, а толкова, колкото могат да се видят на екрана в даден момент. В края на краищата, когато превъртате DataSet, в същия ред може да има или запис, който се нуждае от височина от 1 ред, или такъв, който се нуждае от 2. Можете да изчислите необходимата височина на реда в OnDrawCell и да промените защитено в TDBGrid RowHeights, само внимавайте да не излетите в Stack Overflow :).

Yuyu ! Имате предвид TCustomGrid(. ).RowHeights[Index]? Благодаря, ще опитам. Помощ казва: "Задайте RowWidths по време на изпълнение, за да промените височината на отделен ред."