Използване на 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 по време на изпълнение, за да промените височината на отделен ред."