Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизСтроки DB в TreeView Найти похожие ветки
← →
Jeeb (2007-02-06 18:44) [0]Привет всем. Возник вопрос... но не знаю, как осуществить, помогите... плз...
Компоненты:
TreeView (Tree), DBGrid (DBTree), ADOConnection (FDM.ADOConn), ADOTable (FDM.TblTree), DataSource (FDM.SrcTree).
FDM.TblTree имеет поля "Наименование", "Уровень", "Надуровень", где
Наименование: key*, varchar, 50
Уровень: int, 10
Надуровень: key*, varchar, 50
* - составной ключ
Пример:
| Наименование | Уровень | Надуровень |
|----------------+---------+-------------|
| Кузов | 0 | |
| Бампер | 1 | Кузов |
| Крыло | 1 | Кузов |
| Лев. пер. | 2 | Крыло |
| Прав. пер. | 2 | Крыло |
| Лев. зад. | 2 | Крыло |
| Прав. зад. | 2 | Крыло |
| Трансмиссия | 0 | |
| Ступенчатая | 1 | Трансмиссия |
| Автоматическая | 1 | Трансмиссия |
...
Из примера видно, что в поле "Надуровень" записываются значения,
которые при создании Tree будут являться выше на 1 уровень от
значений, которые записываются поле "Наименование", а сам
уровень указывается в поле "Уровень". Нужно заметить, что
записи, имеющие уровень 0, надуровня не имеют.
Есть вероятность того, что кортежи (строки) таблицы не
упорядочены, т.е. в разнобой...
Необходимо:
1. Упорядочить FDM.TblTree по полю "Уровень" (не обязательно).
2. Добавить ветки "Наименование" в Tree, где уровень равен 0.
3. Добавить ветки "Наименование" в Tree, где уровень равен 1,
зная что добавление будет происходить в ветку с именем
"Надуровень", где уровень равен 0.
4. По аналогии с пунктом 3, только повышая уровень на один.
Должно получиться (исходя из примера):
+ Кузов
|-- Бампер
|-+ Крыло
| |-- Лев. пер.
| |-- Прав. пер.
| |-- Лев. зад.
| |-- Прав. зад.
+ Трансмиссия
|-- Ступенчатая
|-- Автоматическая
Ну вот, в прочем, и все....
Надеюсь на помощь...
← →
Jeeb (2007-02-06 18:47) [1]
procedure TFTree.BUpdateClick(Sender: TObject);
var
I, L, MaxL, J, K, M, N: Integer;
S, P, Q: String;
begin
MaxL:=0;
for I:=1 to Navigator.DataSource.DataSet.RecordCount do
begin
L:=Navigator.DataSource.DataSet.FieldByName("Óðîâåí ;ü").AsInteger;
if L>MaxL then
MaxL:=L;
Navigator.DataSource.DataSet.Next;
end;
L:=0;
Navigator.DataSource.DataSet.First;
for I:=1 to Navigator.DataSource.DataSet.RecordCount do
begin
L:=Navigator.DataSource.DataSet.FieldByName("Óðîâåí ;ü").AsInteger;
if L=0 then
Tree.Items.Add(Tree.TopItem, Navigator.DataSource.DataSet.FieldByName("Íàèìåí&# 238;âàíèå").AsString);
if L>0 then
begin
P:=Navigator.DataSource.DataSet.FieldByName("Íàèìåí ;îâàíèå").AsString;
M:=Navigator.DataSource.DataSet.RecNo;
FDM.TblTree.Lookup("Íàäóðîâåíü ", P, "Íàèìåíîâàíèå");
for K:=0 to Tree.Items.Count-1 do
begin
Tree.Select(Tree.Items.Item[K]);
if Tree.Selected.Text=Navigator.DataSource.DataSet.FieldByName("Íàè& #236;åíîâàíèå").AsString then
N:=K;
end;
Tree.Select(Tree.Items.Item[N]);
Tree.Items.AddChild(Tree.Selected, Navigator.DataSource.DataSet.FieldByName("Íàèìåí&# 238;âàíèå").AsString);
end;
Navigator.DataSource.DataSet.Next;
end;
end;
Думал так сделать... но увы... не получается...
← →
Jeeb (2007-02-06 18:51) [2]пардон за букараги...
Уровень, Уровень, Наименование, Наименование, Надуровень, Наименование, Наименование, Наименование... это букараги по порядку...
← →
Johnmen © (2007-02-06 19:29) [3]Разбираться в вышенаписанном вряд ли у кого будет желание.
Единственное, что можно порекомендовать, так это перейти к общепринятым деревянным структурам и способам их построения и реализации, а не выдумывать велосипед с квадратными колёсами.
← →
MsGuns © (2007-02-06 22:44) [4]Да.. и эта еще.. нафигатор на фиг !
← →
Ega23 © (2007-02-07 08:26) [5]
> Да.. и эта еще.. нафигатор на фиг !
А строку делать ключевым полем - моветон.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c