Autor Beitrag
kuba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 02.01.06 18:38 
Hallo,

ich habe eine Funktion geschrieben, die mein TreeView füllt.
Ich gebe meinem Treeview ein ADODataSet rein, welches schon gruppiert und sortiert ist. Die Funktion fuelleTreeView bringt es in die richtige Anzeige.
Jetzt möchte ich meinem Treeview noch die Ids als Objekt mitgeben. Diese sollen rechts neben dem jeweiligen Text stehen und nicht sichtbar sein.

Wie kann man das realisieren? Freue mich über jeden Vorschlag.

Vielen Dank im Voraus.

Kuba

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
function FuelleTreeView (     ADODataSet1 : TADODataSet;
                          var treeView    : TTreeView;
                          var Sender      : TObject):boolean;

var
y,                                //alle Records/Zeile (Wert ermittelt durch Count)
x,                                //alle Felder (Wert ermittelt durch Count)
i,                                //laufvariable für unsere "Schleife über alle Datensätze"
lLevel,                           //Laufvarible für unsere "Schleife über alle Felder"
j,                                //laufvariable
k                   : Integer;
TreeNode,
TreeNode1           : TTreeNode;
TreeStringParents,
DBString            : String;

kh_i : integer;

test : integer;




begin
result := true;
try
  x := ADODataSet1.FieldCount;
  y := ADODataSet1.RecordCount;

  test := 2;

//MutterTreeNode wird angelegt
  FreeAndNil(TreeNode);
  TreeView.Items.Clear;
  ADODataSet1.First;
  treeNode := TreeView.Items.AddChild(nil,ADODataSet1.Fields[lLevel].Value);
  

//Schleife über alle Datensätze
 for i:= 0 to y - 1 do begin

    //Schleife über alle Felder
      for lLevel :=0 to x-1 do begin  //gehe eins nach rechts in meinem TreeView
        dbString          := '';
        TreeStringParents := '';

          //Wenn mein TreeNode keine Kinder hat, lege einen neuen TreeNode mit dem Kind an
          if TreeNode.level < x-1 then begin
            if treeNode.HasChildren = false then begin
             treeNode := TreeView.Items.AddChild(TreeNode,ADODataSet1.Fields[TreeNode.level+1].Value);

                if TreeNode.level = x-1 then begin
                  break;
                end
                else begin
                  continue;
                end;
            end;
          end;

          //TreeString zusammenbauen
            for j:= 0 to lLevel do begin
               TreeNode1 := TreeNode;
                for k:= 1 to TreeNode.Level-j do begin
                    TreeNode1 := TreeNode1.parent;
                end;
                TreeStringParents := TreeStringParents + TreeNode1.Text;
            end;

          //DBString zusammenbauen
          for j:= 0 to lLevel do begin
              dbString   := dbString  +  ADODataSet1.Fields[j].Value;   //lese den Text aus dem ADODataSet aus
          end;

          //vergleiche den Text aus der Treenode mit dem Text im ADODataSet
          //wenn sie gleich sind, gehe eins weiter im TreeNode, ansonsten else-Teil
          if TreeStringParents = dbString then begin
             TreeNode := TreeNode.GetNext;
                    while TreeNode.getNextSibling <> nil do begin
                      TreeNode := TreeNode.getNextSibling;
                    end;
          end
          //lege einen neuen TreeNode an, an die aktuell select'tete Stelle
          else begin
            TreeNode := TreeView.Items.Add(TreeNode,ADODataSet1.Fields[TreeNode.level].Value);
          end;
    end;//Schleife über alle Felder

       //Der Curor sitzt wieder auf dem ersten Feld (links vorne)
       TreeNode1 := TreeNode;
       for k:= 0 to TreeNode.Level-1 do begin
        TreeNode1 := TreeNode1.Parent;
       end;
       TreeNode := Treenode1;
       //TreeNode.Selected := True;

       //Nächster Datensatz
       ADODataSet1.Next;
  end;//Schleife über alle Datensätze
 AdoDataset1.Close;

except
  result := false;
end;

end;//Funktion
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 02.01.06 18:41 
Hallo

auch ein treenode hat eine Data-eigenschaft, dort kannst du dranhängen, was du willst.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)