我想请教一下怎么样将TreeView的节点存入数据库中
还有怎么样从数据库中读取数据显示到TreeView中

解决方案 »

  1.   

    procedure TForm1.BitBtn3Click(Sender: TObject);
    begin
      query1.sql.text:='select * from table order by fatherarea'
      query1.open;
      Query1.First;
      while not Query1.Eof do
      begin
         if Query1.FieldByName('fatherarea').AsInteger=0 then     TreeView1.Items.AddObject(TreeView1.TopItem,Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger))
         else
         begin
           TreeView1.Items.AddChildObject(TreeView1.Items[getindex(pointer(Query1.FieldByName('fatherarea').AsInteger))],Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger))
         end;
         Query1.Next;
      end;
    end;function TForm1.getindex(idvalue:pointer): integer;
    var
      i:integer;
      inde:integer;
    begin
      inde:=0;
      for i:=0 to TreeView1.Items.Count-1 do
      begin
        if TreeView1.Items[i].Data=idvalue then
        begin
          inde:=i;
          break;
        end;
      end;
      Result:=inde;
    end;
      

  2.   

    用节点的tag来唯一标识节点。在数据库中给每个节点增加两个字段NodeId和ParentId,nodeid用于存放当前节点的tag,parentid用于存放父节点的tag,没有的话用0或-1代替。
      

  3.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, Db, ADODB, StdCtrls;type
      TfrmMain = class(TForm)
        TreeView1: TTreeView;
        ADOConnection1: TADOConnection;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function getindex(idvalue: Integer): integer;
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementation{$R *.DFM}procedure TfrmMain.Button1Click(Sender: TObject);
    begin
      with TADOQuery.Create(nil) do
      begin
        Connection := ADOConnection1;
        sql.text:='select * from Tree order by Parent_ID';
        open;
        First;
        while not Eof do
        begin
          if FieldByName('Parent_ID').AsInteger=0 then
          begin
            with TreeView1.Items.Add(TreeView1.TopItem,
                                      FieldByName('Node_Name').AsString) do
            begin
              StateIndex :=  FieldByName('ID').AsInteger;
            end;
          end
          else
          begin
            with TreeView1.Items.AddChild(TreeView1.Items[getindex(FieldByName('Parent_ID').AsInteger)],
                                            FieldByName('Node_Name').AsString) do
            begin
              StateIndex :=  FieldByName('ID').AsInteger;
            end;
          end;
          Next;
        end;
      end;
    end;function TfrmMain.getindex(idvalue: Integer): integer;
    var
      i:integer;
      inde:integer;
    begin
      //
      inde:=0;
      for i:=0 to TreeView1.Items.Count-1 do
      begin
        if TreeView1.Items[i].StateIndex = idvalue then
        begin
          inde:=i;
          break;
        end;
      end;
      Result:=inde;
    end;end.
      

  4.   

    不好,做的时候忘记释放资源了,自己记得释放AdoQuery。
    数据库:只有一个表Tree
    ID:自动编号
    Parent_ID:父节点编号
    Node_Name:节点Caption
    页面Form1
    就一个TreeView和一个Button,都是默认值。