Carefully study the following code: DBTreeView - TreeView direct connection data table unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, ComCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Mask, ImgList; type TForm1 = class (TForm) TreeView1: TTreeView; ImageList1: TImageList; DataSource1: TDataSource; DBEdit1: TDBEdit; Label1: TLabel; Label2: TLabel; DBEdit2: TDBEdit; Table1: TTable; Label3: TLabel; DBNavigator1: TDBNavigator ; Label4: TLabel; DBEdit3: TDBEdit; DBEdit4: TDBEdit; procedure FormCreate (Sender: TObject); procedure TreeView1Change (Sender: TObject; Node: TTreeNode); procedure DataSource1StateChange (Sender: TObject); procedure Table1AfterInsert (DataSet: TDataSet); procedure Table1BeforeDelete (DataSet: TDataSet); procedure Table1BeforeEdit (DataSet: TDataSet); procedure Table1AfterDelete (DataSet: TDataSet); procedure Table1AfterPost (DataSet: TDataSet); private function GetFieldList: TString List; {Private-Declarationen} public {Public-Declarationen} end; var Form1: TForm1; FieldList: TStringList; implementationuses TreeFunc; {$ R * .DFM} function TForm1.GetFieldList: TStringList; begin FieldList.clear; FieldList.add ( Table1.fieldbyname ( 'Country') asstring); FieldList.add (Table1.fieldbyname ( 'city') asstring); FieldList.add (Table1.fieldbyname ( 'Company') asstring); Result:... = FieldList; end Procedure TFORM1.FormCreate (Sender: Tobject); begin fieldlist: = tstringlist.create; treeview1.items.beginupdate; // forbid treeview update table1.first;
while not Table1.eof do begin TreeAddItem (TreeView1, GetFieldList, Table1.getBookmark, false); // node generates Table1.next; end; FieldList.clear; TreeView1.Alphasort; TreeView1.items.Endupdate; // make first record selected: TreeView1.items [2] .selected: = true; end; procedure TForm1.TreeView1Change (Sender: TObject; Node: TTreeNode); begin Datasource1.enabled: = Node.data <> nil; if DataSource1.enabled then Table1. Gotobookmark (node.data); end; procedure TForm1.DataSource1StateChange (Sender: TObject); var ItemList: TStringList; Node: TTreeNode; beginend; procedure TForm1.Table1AfterInsert (DataSet: TDataSet); begin FieldList.clear; end; procedure TForm1. Table1BeforeDelete (DataSet: TDataSet); begin GetFieldList; end; procedure TForm1.Table1BeforeEdit (DataSet: TDataSet); begin GetFieldList; end; procedure TForm1.Table1AfterDelete (DataSet: TDataSet); var CascadeDeleteLevel: Integer; begin CascadeDeleteLevel: = 0; TreeDeleteItem ( TreeView 1, FieldList, CascadeDeleteLevel); end; procedure TForm1.Table1AfterPost (DataSet: TDataSet); begin TreeView1.items.beginUpdate; if FieldList.count> 0 then TreeDeleteItem (TreeView1, Fieldlist, 0); TreeView1.selected: = TreeAddItem (TreeView1 Getfieldlist, table1.getbookmark, true); TreeView1.Items.Endupdate; end; end.///----------------------Unit Treefunc; interface uses Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs; function TreeFindItem (Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode; function TreeAddItem (Sender: TTreeView; ItemList: TStrings; Bookmark : TBOOKMARK; Resort: Boolean: Ttreenode; Function TreegetItem (Sender: TtreeView;
ItemList: TStrings): TTreeNode; procedure TreeDeleteItem (Sender: TTreeView; ItemList: TStrings; Level: Integer); implementation function TreeAddItem (Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode; var ThisNode, Node : Ttreenode; i: integer; begin node: = nil; // nil = level 0 HAS NO PARENT Node // this is checked by TreefindItem for i: = 0 to temlist.count -1 do beg // for thisnode: = TreefindItem (Sender, Node, ItemList [I]); if thisnode <> nil the node: = thisnode else begin if i