TreeView - odnoszenie się do item i subitem.

0

Witam,

Napotkałem na pewien problem z którym nawet google mi nie poradziło. Otóż w pierwszym etapie odczytuje Sekcje

TreeView.Items.Clear;
    Data.SQL.Clear;
    Data.SQL.Add('SELECT * FROM '+Key_Sekcje);
    Data.Active := True;
    Data.First;
    While not Data.Eof do begin
      Id := TreeView.Items.Add(nil, FieldByString(sek_nazwa)).Index;
      TreeView.Items[Id].SelectedIndex := FieldByInteger(sek_id);
      Data.Next;
    End;

Potem odczytuje Kategorie

    Data.SQL.Clear;
    Data.SQL.Add('SELECT * FROM '+Key_Kategorie);
    Data.Active := True;
    Data.First;
    While not Data.Eof do begin
      For X := 0 to TreeView.Items.Count-1 do
        If TreeView.Items[X].SelectedIndex = FieldByInteger(kat_sekcja) Then Break;
      Id := TreeView.Items.AddChild(TreeView.Items[X] , FieldByString(kat_nazwa)).Index;
      TreeView.Items[X].Item[Id].SelectedIndex := FieldByInteger(kat_id);
      Data.Next;
    End;

Dane wejściowe: "pierwsze to nazwa, druga dana to index, trzecia to index sekcji"

//Sekcji
Sekcja1    1
Sekcja2    2

//Kategorii
Test1    1    1
Test5    2    1
Test3    3    2
Test4    4    1

Drzewo powinno wyglądać tak:

Sekcja 1

  • Test1
  • Test5
  • Test4

Sekcja 2

  • Test3

A otrzymuję

Sekcja 1

  • Test1
  • Test5
    • Test 3
  • Test4

Sekcja 2

Uważam że problem polega na tym że polecenie Treeview.Items.Count sumuje wszystkie itemu i subitemy. Pytanie jak odnieść się tylko do itemów głównych Sekcja1 Sekcja2 w pętli

{petla powtarzana tyle razy ile jest Sekcji}
Wykonac na Sekcji nr X // 1..2

0

Zapomniałem dodać muszę operować tylko na indeksach a nie nazwach które z czasem mogą ulec zmianie lub się zdublować

0

TreeView.Items[X].Item[Id].SelectedIndex := -FieldByInteger(kat_id);
Dla Sekcji będą indeksy wpisane jak leci, dla testów ze znakiem minus. Więc nie ma szansy pomylić co jest czym.

0

Dzięki wielkie, prosty sposób ale działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1