Главная страница
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.029 c
15-1175481818
SerJaNT
2007-04-02 06:43
2007.04.29
Проблема с картой памяти


1-1173180839
tytus
2007-03-06 14:33
2007.04.29
Как проверить пустой ли битмап?


2-1175702761
I-new
2007-04-04 20:06
2007.04.29
Скрыть папку


2-1175706272
Igor_w
2007-04-04 21:04
2007.04.29
Нужно организовать телефонный справочник


15-1175359491
ArtemESC
2007-03-31 20:44
2007.04.29
С наступающим днем Космонавтики!!!