认真研究如下代码:dbtreeview--treeview直接连接数据表
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: tstringlist;
{ private-declarationen }
public
{ public-declarationen }
end;
var
form1: tform1;
fieldlist: tstringlist;
implementation
uses 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);//生成结点
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;
begin
end;
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(treeview1, 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;