我想写一个这样的界面
比如当我点击区域资料的时候.右边的dbgird里面会显示出相对应的信自.
因为没用过这个组件.希望能告诉我方法.我需要有例子.谢谢

解决方案 »

  1.   

    补充一下.比如点右下角新增.在区域资料内增加了(05)某某某     如何让treeview里面也有显示.
         
      

  2.   

    http://topic.csdn.net/u/20080604/16/8dec91fb-efe3-4ded-9995-8a82db22a214.html
      

  3.   

    哪张贴子我看过了.我要的是treeviwer 里面.比如说
    区域资料下面的资料.都是通过数据库加进去的.如果我在数据库里面做了增加或减少.上面也会有反映.
      

  4.   

    你需要理解一下TreeView控件的真正作用
      

  5.   

    http://www.cnblogs.com/del/archive/2008/03/20/1114450.html?updated=1
      

  6.   


    对于treeview的变更,你需要重新从数据库中提取数据加载,进行刷新。
    因为treeview不是一个数据感知控件
      

  7.   

    对于treeview的使用,我简单弄了个例子,你看看,其实treeview有一个属性data可以把这个充分利用起来,很不错的。(说的对不对,凑和看吧)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, ComCtrls;type
      PDEPT = ^TDEPT;
      TDEPT = Record
        deptno: string;
        deptname: String;
      END;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        TreeView1: TTreeView;
        Button1: TButton;
        ADOQuery1: TADOQuery;
        ADOQuery2: TADOQuery;
        procedure Button1Click(Sender: TObject);
        procedure TreeView1Click(Sender: TObject);
      private
        { Private declarations }
        FDEPT: PDEPT;
        //procedure getEmployeeInfo(bh: String);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); //这个你可以做成一个过程,当数据库中内容变化时调用它就可以了
    var
      RNode,vNode1,vNode2: TTreeNode;
    begin
      //加载部门信息
      TreeView1.Items.Clear;
      RNode := Treeview1.Items.Add(nil,'所有部门');
      with adoquery1 do
      begin
        close;
        sql.text := 'select BH,MC from test where length(bh)=3 order by BH';
        Open;
        while not eof do
        begin
          New(FDEPT);
          FDEPT.deptno := Fields[0].AsString;
          FDEPT.deptname := Fields[1].AsString;
          vNode1 := Treeview1.Items.AddChildFirst(RNode,FDEPT.deptno+'  '+FDEPT.deptname);
          vNode1.Data := FDEPT;
          //开始取得子部门
          with adoquery2 do
          begin
            Close;
            SQL.Text := ' Select BH,MC from test where length(bh)<>3 and substr(bh,1,3)=:deptno Order by BH';
            Parameters.ParamByName('deptno').value := FDEPT.deptno;
            Open;
            while not adoquery2.Eof do
            begin
              New(FDEPT);
              FDEPT.deptno := Fields[0].AsString;
              FDEPT.deptname := Fields[1].AsString;
              vNode2 := Treeview1.Items.AddChildFirst(vNode1,FDEPT.deptno+'  '+FDEPT.deptname);
              vNode2.Data := FDEPT;
              Next;
            end;
          end;
          Next;
        end;
      end;
    end;procedure TForm1.TreeView1Click(Sender: TObject);
    begin
      if Treeview1.Selected.Level=1 then
      begin
        New(FDEPT);
        FDEPT := TreeView1.Selected.Data;
        showmessage(FDEPT.deptno+'    '+FDEPT.deptname); //这里你可以关联数据库进行查询,使其与dbgrid关联
      end;
    end;end.
      

  8.   

    添加节点,就用递归的方法实现吧...例子就不给了,关键是如何让树的节点跟着数据库的操作走,比如新增一条记录时,相应的节点也新增一个,删除一条记录时,也删除相应的节点. 
    type 
      TCoid=record                  //记录用来存放 coid 编号 
        Coid:string; 
        Isopen:boolean; 
        Companytypeid:integer; 
        Areaid:Variant; 
        nNodeData:TTreeNode; 
      end; 
      PTCoid=^TCoid;                //结构体指针 pCoid:array [0..10000]  of PTCoid;  
    添加节点时,动态增加数组元素,并为每个属性赋值(树的AbsoluteIndex 值与数组下标相对应),这样可以使得树的节点和数据库关联起来,之后是操作,在修改数据之前,你可以记下状态,然后再在 DataSource1DataChange 中进行判断,修改的是哪些字段,再对树进行调,比如移动节点 TreeView1.Selected.MoveTo(pCoid[i].nNodeData,naAddChildFirst);//参数:父节点(需要移动到哪个节点下),添加方式,要注意数组中的属性也要跟着变,不然查询数据时会有误 
    新增,删除数据,注意新增删除时,对数组也要作同样的操作(新增,删除元素),然后再对树进行操作 如果需要完整的例子....请留言!!