如何根据数据库的内容刷新treeview树形结构 在一个Form中用一“生成树”按钮,用递归的方法生成tree结构,在另一个form中用一个按钮向数据库中添加记录,没有对treeview进行添加节点的操作,数据库的内容有了变化,如何使treeview进行相应的刷新而显示最新的数据库内容 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假如在第一个Form的生成树按纽Name叫TreeC在添加记录完之后,用一个语句form.TreeCClick(sender); 这样是可以 但是在执行这个操作之前 是不是还要把先前的tree销毁掉 不然会有两个相同的tree在界面上 procedure TForm1.ButloadtreeClick(Sender: TObject); //根节点,当前节点,父节点 var Troot,Tnode,TparentNode:TtreeNode; pNodeVar:^integer;//指向Node.date的指针 TnodeName:string;//节点名称begin treeview1.Items.Clear ; query1.Close ; query1.SQL.Clear ; query1.SQL.Add('select * from access'); query1.Open ; //开始加载树,把部门代码放放相应节点的data中 if query1.RecordCount <=0 then begin application.MessageBox(pchar('无根'),'错误',mb_ok); exit; end; //加载根节点,上级部门代码字段值为-1 query1.Close ; query1.SQL.Clear ; query1.SQL.Add('select * from access where code=-1'); query1.Open ; try new(pNodeVar); pNodeVar^:=query1.fieldbyname('accesscode').AsInteger ; TNOdeName:=query1.fieldbyname('name').AsString ; Troot:=treeview1.Items.AddObjectFirst(nil,TNodeName,PNodeVar); finally end; //--------加载子节点------------------------------------------------- CreateTree(treeview1, Troot);end;procedure TForm1.CreateTree(treeview1:Ttreeview;Troot:TtreeNode);var //子用的 queryTmp:Tadoquery; TParentNode, TNode: TTreeNode; p: ^integer; NodeCode: integer; //节点代码 strNodeName: string; intNodeCode: integer;begin try querytmp:=Tadoquery.Create(self); querytmp.Connection := ADOConnection1; TparentNode:=Troot; new(p); p:=TparentNode.Data ; NodeCode:=p^; querytmp.Close ; querytmp.SQL.Clear ; querytmp.SQL.Add('select * from access where code='+inttostr(NodeCode)); querytmp.Open ; if querytmp.RecordCount >0 then begin while not querytmp.Eof do begin strNodeName:=querytmp.fieldbyname('name').AsString ; intNodeCode:=querytmp.fieldbyname('accesscode').asinteger; new(p); p^:=intNodeCode; Tnode:=treeview1.Items.AddChildObject(TparentNode,strNodeName,p); createtree(treeview1,Tnode); //递归加载树 if not querytmp.Eof then querytmp.Next ; end; end; finally querytmp.Free ; querytmp:=nil; end;end; 这个错误如何处理啊 ? 写一个关于字节的类(跪求好心人帮忙~~~~~~`````````) 在Delphi中使用ADO遇到的奇怪问题 dbgrid的问题 关于tabcontrol的问题请教,在线等,谢谢 第一次用Rave求教!汗 这个软件能要多少钱?? 向高手高手高高手,请教,如何实现DELPHI在类似DOS环境下输入字符? 读取二进制注册表的问题! 请问在Access2000中是否可以用sql语句动态增加字段 请问怎样把DateTimePicker直接和数据库中的字段邦定? 怎么将form上的控件复制都另外的FORM上。
在添加记录完之后,用一个语句
form.TreeCClick(sender);
//根节点,当前节点,父节点
var Troot,Tnode,TparentNode:TtreeNode;
pNodeVar:^integer;//指向Node.date的指针
TnodeName:string;//节点名称begin
treeview1.Items.Clear ;
query1.Close ;
query1.SQL.Clear ;
query1.SQL.Add('select * from access');
query1.Open ;
//开始加载树,把部门代码放放相应节点的data中
if query1.RecordCount <=0 then
begin
application.MessageBox(pchar('无根'),'错误',mb_ok);
exit;
end;
//加载根节点,上级部门代码字段值为-1 query1.Close ;
query1.SQL.Clear ;
query1.SQL.Add('select * from access where code=-1');
query1.Open ;
try
new(pNodeVar);
pNodeVar^:=query1.fieldbyname('accesscode').AsInteger ;
TNOdeName:=query1.fieldbyname('name').AsString ;
Troot:=treeview1.Items.AddObjectFirst(nil,TNodeName,PNodeVar);
finally
end; //--------加载子节点-------------------------------------------------
CreateTree(treeview1, Troot);end;procedure TForm1.CreateTree(treeview1:Ttreeview;Troot:TtreeNode);
var
//子用的
queryTmp:Tadoquery;
TParentNode, TNode: TTreeNode; p: ^integer; NodeCode: integer; //节点代码 strNodeName: string; intNodeCode: integer;
begin
try
querytmp:=Tadoquery.Create(self);
querytmp.Connection := ADOConnection1; TparentNode:=Troot; new(p);
p:=TparentNode.Data ;
NodeCode:=p^; querytmp.Close ;
querytmp.SQL.Clear ;
querytmp.SQL.Add('select * from access where code='+inttostr(NodeCode));
querytmp.Open ; if querytmp.RecordCount >0 then
begin
while not querytmp.Eof do
begin
strNodeName:=querytmp.fieldbyname('name').AsString ;
intNodeCode:=querytmp.fieldbyname('accesscode').asinteger; new(p); p^:=intNodeCode;
Tnode:=treeview1.Items.AddChildObject(TparentNode,strNodeName,p); createtree(treeview1,Tnode); //递归加载树 if not querytmp.Eof then querytmp.Next ;
end;
end;
finally
querytmp.Free ;
querytmp:=nil;
end;
end;