请问,我想将treeview开成以下结构该怎样做?
A单位:
--李三
--李四
--李五
。。
B单位:
--李三娃
--李七
--李八
。。
C单位:


当我用单击‘A单位’时,在DBGRID显示A单位的所有员工,当我用单击‘李三’时记录指针指向李三的记录.
及添加,删除,修改等。谢谢!!

解决方案 »

  1.   

    你的单位名、姓名应该是两个字段,在treeview onChange事件中写上数据集的 在点击第一层时,判断
    Filter := '单位名 = A单位', 在var
        ls_Filter : string;
    begin
        Case Node.Level of
        0:  begin
                if node.Text = 'A单位' then
                    ls_Filter :=  '单位 = A单位'
                else if node.Text = ' b单位' then
                    ls_Filter :=  '单位 = b单位'
                ADODataset1.Filter := ls_Filter ;
                ADODataset1.Filtered := true;
            end;
        1:  begin
                ls_filter :=  '单位= ' + node.Parent.Text;
                ls_Filter :=   ls_Filter + ' and 姓名=' + node.text
                ADODataset1.Filter := ls_Filter ;
                ADODataset1.Filtered := true;
                ADODataset1.First;
            end;
        end;至于增删改就自己研究吧
      

  2.   

    单击这点,我已经弄明白了,但是弄不明白怎样使用BOOKMAKE和最好的成树方法~~~好果能够帮忙解决,再另加100分~~
      

  3.   

    呵呵! 这位老兄挺大方的。你建立一个表结构如下 。
    parent_id, id, 单位名/个人名称.-->用id和个人资料表建立连系。
    A单位id1,    1,  A单位
    ...id1   ,   2,  张三 
    ...id1 ,     3,  李四
    B单位id2,    4, B单位
    ...id2,     6,  王五id作为主键
      

  4.   

    看看这个过程吧,当初我就是从这个过程开始的
    procedure DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
    var Nodes: array of TTreeNode;
        Strs: array of string;
        i: integer;
    begin  with DataSet do
      begin
        Close;
        Open;
        SetLength(Nodes, FieldCount+1);
        SetLength(Strs, FieldCount);
        Nodes[0] := TreeView.Items.AddChild(nil, NodeRoot);
        for i:=Low(Strs) to High(Strs) do Strs[i] := #255;
        First;
        while not Eof do
        begin
          for i:=Low(Strs) to High(Strs) do
            if Strs[i]<>Fields[i].AsString then
            begin
              Strs[i] := Fields[i].AsString;
              Nodes[i+1] := TreeView.Items.AddChild(Nodes[i],Fields[i].AsString);
            end;
          Next;
        end;
        Close;
      end;
    end;
      

  5.   

    还有是BOOKMAKE的问题,能解决这个问题的可以得到最多分
      

  6.   

    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Grids, DBGrids, Db, DBTables;
    type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        Table1: TTable;
        DBGrid1: TDBGrid;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      SavePlace: TBook;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    begin
        SavePlace :=Table1.GetBook ;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       Table1.GotoBook(SavePlace);
    end;end.
      

  7.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        ADOTable1: TADOTable;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        procedure FormCreate(Sender: TObject);
        procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var tmp:string;
         i:integer;begin
    with adotable1 do
    begin
      disablecontrols;
      First;
      while not eof do
      begin
    if fieldbyname('pid').AsString = '' then
    begin
    TreeView1.Items.AddObject(nil,fieldbyname('单位全名').AsString,pchar(FieldByName('id').AsString));
    end
    else begin
          with TreeView1 do
          begin
            for i := 0 to Items.Count -1 do
            begin
              tmp := pchar(items[i].data);  // var temp : String
              if (tmp = fieldbyname('pid').AsString )then
              begin
                items.AddChildObject(items[i],
                        fieldbyname('单位全名').AsString,
                        pchar(fieldbyname('id').AsString));
                //break;
              end; // if
            end; // for
          end; // with treeview1
        end; // else
        next;
      end; // while  Enablecontrols;end; // with table1TreeView1.FullExpand;end;
    请问大家在这段代码里,怎样加入记录定位,我想点击一吓其中某个节点,adotable会自动定位到该节点所指向的记录.