![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
использование ehlib в режиме TreeView [D7, 2000]
delphim © (2006-12-26 06:58:00)Здравствуйте !
Пытаюсь использовать 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.FullBuildCheck := true;
MemTable.Active := true;
MemTable.TreeList.Active := true; // here is error
Вроде всё верно. Что я не понял ?
delphim (2006-12-28 10:03:00) [1]ЮЮ !
Вы имеете ввиду TCustomGrid(...).RowHeights[Index] ? Спасибо, попробую.
В help написано:
"Set RowWidths at runtime to change the height of an individual row."
ЮЮ (2006-12-28 04:22:00) [2]В TDBGrid-е все строки по определению дожны быть одной высоты, в отличии от TDraw(String)Grid, потому что у него не столько строк, сколько записей в отображаемом наборе данных, а столько, сколько можно увидеть на экране за один раз. Ведь при скроллировании DataSet-а в одной и той же строке может оказаться то запись, для которой нужна высота в 1 строку, то та, для которой нужна 2. Можно в OnDrawCell вычислить необходимую высоту строки и изменить protected у TDBGrid RowHeights, только осторожно, чбы в Stack Overflow не влететь :).
delphim (2006-12-26 13:09:00) [3]ЮЮ ! Что-то сегодня я очень неаккуратен. Ну, дерево, наконец, получилось. Но не могу справиться с такой функциональностью: требуется отобразить данные одной колонки в несколько строк. Если использовать
aDBGrid.RowLines := 2; // aDBGrid is type TDBGridEh
aDBGrid.Columns[1].WordWrap := true; // эта колонка с длинным текстом
то высота строк устанавливается для всех строк.
А нужно только для некоторых, - для Parent узлов aDBGrid.RowLines должно быть равным := 1; для детёнышей равным := 2;
Написал
aDBGrid.OptionsEh := aDBGrid.OptionsEh + [dghFitRowHeightToText];
но эффект не получил.
Вот мои безрезультатные попытки:
// aDBGrid.RowHeight := -1;
aDBGrid.RowLines := 0;
aDBGrid.OptionsEh := aDBGrid.OptionsEh + [dghFitRowHeightToText];
aDBGrid.DrawMemoText := true;
aDBGrid.RowSizingAllowed := true;
Возможно, TDBGridEh не позволяет это сделать ?
ЮЮ (2006-12-26 11:32:00) [4]
> Для 1-й строки я почему-то не обращал внимания на значение
> поля RefParentFieldName
А для последующих - не обращал внимания на значение поля KeyFieldName? :)
delphim (2006-12-26 11:28:00) [5]ЮЮ ! Спасибо.
Вот что значит свежий взгляд. Для 1-й строки я почему-то не обращал внимания на значение поля RefParentFieldName. После изменений всё поехало.
ЮЮ (2006-12-26 10:00:00) [6]
> 1 1 parent 1
сам себе родитель? Н.д., ИМХО, должен быть вида
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
delphim (2006-12-26 07:00:00) [7]извиняюсь, не сказал какая ошибка.
Формируется ошибка “Reference-loop found.