在一个Form中用一“生成树”按钮,用递归的方法生成tree结构,在另一个form中用一个按钮向数据库中添加记录,没有对treeview进行添加节点的操作,数据库的内容有了变化,如何使treeview进行相应的刷新而显示最新的数据库内容

解决方案 »

  1.   

    假如在第一个Form的生成树按纽Name叫TreeC
    在添加记录完之后,用一个语句
    form.TreeCClick(sender);
      

  2.   

    这样是可以 但是在执行这个操作之前  是不是还要把先前的tree销毁掉 不然会有两个相同的tree在界面上
      

  3.   

    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;