Thema: Treeview

Einzelnen Beitrag anzeigen

roland9999

Registriert seit: 4. Mär 2012
23 Beiträge
 
Delphi 2009 Professional
 
#1

Treeview

  Alt 9. Mär 2012, 11:22
Hallo zusammen,

ich sehe bzw. erkenne den Fehler nicht.
Auf dem Bild könnt ihr das Ergebnis sehen.
Die Hauptkategorien werden richtig angezeigt.
Die ersten beiden Unterkategorien "Testkategorie und Testkategorie 2" in der Hauptkategorie Madonnen, sind auch richtig.
Alle weiteren Unterkategorien stehen an der falschen Stelle. Die sollten eigentlich unter der dazugehörigen Hauptkategorie stehen.
Ich vermute, dass es an der markierten Stelle liegt.
Vielleicht hat jemand eine Idee.
Hier der Quelltext.

Delphi-Quellcode:
procedure Tf_treeview.Button1Click(Sender: TObject);
var MyTreeNode1 : TTreeNode;
begin
 with tv.Items do
  begin
    clear;
    q2.Close;
    //1.Hauptkategorie
    q2.SQL.Clear;
    q2.SQL.Add('select category_child_id from jos_vm_category_xref ');
    q2.SQL.Add('where category_parent_id = 0');
    q2.Open;

    //Liefert den Namen der Kategorie
    q1.Close;
    q1.SQL.Clear;
    q1.SQL.Add('select category_name from jos_vm_category ');
    q1.SQL.Add('where category_id = :category_id');
    q1.parambyname('category_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
    q1.Open;
    //----------------------------------------------------------------------------------------

    //Eintrag in Treeview
    MyTreeNode1 := Add(nil, q1.FieldByName('category_name').AsString);

    //Unterkategorien der ersten Hauptkategorie
    q3.Close;
    q3.SQL.Clear;
    q3.SQL.Add('select category_child_id from jos_vm_category_xref ');
    q3.SQL.Add('where category_parent_id = :category_parent_id');
    q3.ParamByName('category_parent_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
    q3.open;

    while not q3.eof do
     begin
      //Liefert den Namen der Kategorie
      q4.Close;
      q4.SQL.Clear;
      q4.SQL.Add('select category_name from jos_vm_category ');
      q4.SQL.Add('where category_id = :category_id');
      q4.parambyname('category_id').AsInteger := q3.FieldByName('category_child_id').AsInteger;
      q4.Open;

      //Eintrag der Unterkategorien in die TreeView
      AddChild(MyTreeNode1, q4.FieldByName('category_name').AsString);

      q3.Next;
     end;
    //--------------------------------
    q2.Next;

    //Liefert weitere Hauptkategorien und Unterkategorien
    while not q2.Eof do
     begin
      //Weitere Hauptkategorien in der TreeView anzeigen
      q1.Close;
      q1.SQL.Clear;
      q1.SQL.Add('select category_name from jos_vm_category ');
      q1.SQL.Add('where category_id = :category_id');
      q1.parambyname('category_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
      q1.Open;
      Add(MyTreeNode1, q1.FieldByName('category_name').AsString);
      //-------------------------------------------------------------
      //Unterkategorien der weiteren Hauptkategorien in Treeview anzeigen
      q3.Close;
      q3.SQL.Clear;
      q3.SQL.Add('select category_child_id from jos_vm_category_xref ');
      q3.SQL.Add('where category_parent_id = :category_parent_id');
      q3.ParamByName('category_parent_id').AsInteger := q2.FieldByName('category_child_id').AsInteger;
      q3.open;

      while not q3.eof do
       begin
        //Liefert den Namen der Kategorie
        q4.Close;
        q4.SQL.Clear;
        q4.SQL.Add('select category_name from jos_vm_category ');
        q4.SQL.Add('where category_id = :category_id');
        q4.parambyname('category_id').AsInteger := q3.FieldByName('category_child_id').AsInteger;
        q4.Open;
        //Eintrag der Unterkategorie in die TreeView
[COLOR="Red"]AddChild(MyTreeNode1, q4.FieldByName('category_name').AsString);[/COLOR]
        q3.Next;
       end;

      q2.Next;
     end;

  end;

end;
Für die Hilfe bedanke ich mich.

LG
Roland
Miniaturansicht angehängter Grafiken
treeview1.jpg  
Roland
  Mit Zitat antworten Zitat