Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Строки 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("Óðîâå&#237 ;ü").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("Óðîâå&#237 ;ü").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("Íàèìå&#237 ;îâàíèå").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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
15-1175259825
Jeer
2007-03-30 17:03
2007.04.29
Занятно


2-1175797381
..::KraN::..
2007-04-05 22:23
2007.04.29
Красивая форма.


15-1175257559
Empleado
2007-03-30 16:25
2007.04.29
С наступающим 1 апреля!


2-1176375144
dracula
2007-04-12 14:52
2007.04.29
Как правильно синхронизировать thread?


2-1175854943
=Guest=
2007-04-06 14:22
2007.04.29
Объявление функции