Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Внизиспользование ehlib в режиме TreeView Найти похожие ветки
← →
delphim (2006-12-26 06:58) [0]Здравствуйте !
Пытаюсь использовать 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-26 07:00) [1]извиняюсь, не сказал какая ошибка.
Формируется ошибка “Reference-loop found.
← →
ЮЮ © (2006-12-26 10:00) [2]
> 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 11:28) [3]ЮЮ ! Спасибо.
Вот что значит свежий взгляд. Для 1-й строки я почему-то не обращал внимания на значение поля RefParentFieldName. После изменений всё поехало.
← →
ЮЮ © (2006-12-26 11:32) [4]
> Для 1-й строки я почему-то не обращал внимания на значение
> поля RefParentFieldName
А для последующих - не обращал внимания на значение поля KeyFieldName? :)
← →
delphim (2006-12-26 13:09) [5]ЮЮ ! Что-то сегодня я очень неаккуратен. Ну, дерево, наконец, получилось. Но не могу справиться с такой функциональностью: требуется отобразить данные одной колонки в несколько строк. Если использовать
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-28 04:22) [6]В TDBGrid-е все строки по определению дожны быть одной высоты, в отличии от TDraw(String)Grid, потому что у него не столько строк, сколько записей в отображаемом наборе данных, а столько, сколько можно увидеть на экране за один раз. Ведь при скроллировании DataSet-а в одной и той же строке может оказаться то запись, для которой нужна высота в 1 строку, то та, для которой нужна 2. Можно в OnDrawCell вычислить необходимую высоту строки и изменить protected у TDBGrid RowHeights, только осторожно, чбы в Stack Overflow не влететь :).
← →
delphim (2006-12-28 10:03) [7]ЮЮ !
Вы имеете ввиду TCustomGrid(...).RowHeights[Index] ? Спасибо, попробую.
В help написано:
"Set RowWidths at runtime to change the height of an individual row."
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c