快点啊

解决方案 »

  1.   

    问题详细点啊,表是什么结构,想对应成怎样的treeview;一般思路是:简单点的话,让treeview的treenode.data 指向表中数据的 ID;面向对象的话,用对象把表一封装,让treeview的treenode.data 指向一个对象;
      

  2.   

    TTreeView的详细用法,http://www.cnblogs.com/del/category/127351.html另外D7有自带的Demo
      

  3.   

    [code=Delphi(Pascal)]
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, Menus;type
      TAInfo = class
      private
        FID: integer;
        FPId: integer;
        FName: String;
        public
          constructor Create ; overload ;
          constructor Create(id:integer; pId :integer; name :String ) ; overload ;    public
          property ID :integer read FID write FID ;
          property PId :integer read  FPId write FPId ;
          property Name :String read FName write FName ;
      end;
      TForm1 = class(TForm)
        tv1: TTreeView;
        pm1: TPopupMenu;
        N1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure tv1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      Node :TTreeNode ;
      info :TAInfo ;
    begin
      tv1.Items.BeginUpdate ;
      tv1.Items.Clear ;  tv1.Items.EndUpdate ;
      info := TAInfo.Create(1,0,'开发部');
      Node :=       tv1.Items.Add(nil, info.Name)  ;     //1
      Node.Data := info ;                                //2
      //  1和2 可以用下面语句代替
    //  Node := tv1.Items.AddObject(nil, info.Name, info) ;end;{ TAInfo }constructor TAInfo.Create;
    begin
        self.FID := 0 ;
        self.FPId := -1 ;
        self.FName := '' ;
    end;constructor TAInfo.Create(id, pId: integer; name: String);
    begin
        self.FID := id ;
        self.FPId := pId ;
        self.FName := name ;
    end;procedure TForm1.N1Click(Sender: TObject);
      function getPNodeCount(): integer ;//得到根节点数
      var
        i:integer ;
        cnt :integer ;
      begin
        cnt := 0 ;
        for i :=  0 to tv1.Items.Count -1 do
        begin
          if (tv1.Items.Item[i].Level = 0 ) then
          begin
            cnt := cnt + 1 ;
          end;
        end;    Result := cnt ;
      end;
    var
      Node :TTreeNode ;
      id , pId :integer ;
      info ,addInfo :TAInfo ;begin
       if tv1.Selected <> nil then       //有选中节点
       begin
           info := TAInfo(tv1.Selected.Data) ;
           addInfo := TAInfo.Create ;
           addInfo.ID := tv1.Selected.Count+1 ;
           addInfo.PId := info.ID  ;//增加的节点的PID应该为选中的节点ID
           addInfo.Name := tv1.Selected.Text + '_' + IntToStr(addInfo.ID) ;
           Node :=       tv1.Items.AddChild(tv1.Selected, addInfo.Name)  ;     //1
           Node.Data := addInfo ;                                //2
          //  1和2 可以用下面语句代替
          //  Node := tv1.Items.AddChildObject(tv1.Selected, addInfo.Name, addInfo) ;
       end //没有选中节点,则增加根目录
       else
       begin
            //因为没有实际数据,所以写了一个getPNodeCount
            id :=  getPNodeCount() ;
            addInfo := TAInfo.Create(id, 0 , '新增_' + IntToStr(id));
            Node :=       tv1.Items.Add(nil, addInfo.Name)  ;     //1
            Node.Data := addInfo ;                                //2
            //  1和2 可以用下面语句代替
            //  Node := tv1.Items.AddObject(nil, addInfo.Name, addInfo) ;
       end;
    end;procedure TForm1.tv1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      s_dir: string;
      node: TTreeNode;
    begin
      if Button = mbRight then
      begin      tv1.Selected := tv1.GetNodeAt(X, Y);      //确保在需要添加子节点的节点上面右键  end;
    end ;end.[code]