我想将数据库中的记录显示在treeview中
数据库表结构为
*node_key   int   4 0 节点(自动编号字段)
para_key   int   4 1 父节点(指向父节点,如为0则为根节点)
node_name   varchar   100 0 节点名称如:
1   0   A      
2   1   A-1
3   2   A-2
4   1   B-1
相应树为
A
|-A-1
|  |--A-2
|-B-1  应如何写程序啊,在线等待,感谢

解决方案 »

  1.   

    var
      Tmp : TTreeNode;....
      Tmp := TreeView.Items.AddChild(NIL,'A')
      Tmp := TreeView.Items.AddChild(Tmp,'A-1')
      Tmp := TreeView.Items.AddChild(Tmp,'A-2')
      Tmp := TreeView.Items.AddChild(Nil,'B-1')end;
      

  2.   

    kiboisme(还是铁棒.....针) 大哥,我要从数据库中读出数据再加载到TreeView控件,不是直接这样加,帮我再想想吧
      

  3.   

    http://expert.csdn.net/Expert/topic/1819/1819859.xml?temp=.8736383
      

  4.   

    procedure TfrmDemoTree.mmOperate_DiscnDBClick(Sender: TObject);
    begin
      DisConnectDb;
      //清空树、ListViwe
      if tvDemoTree.Items.Count <> 0 then
        tvDemoTree.Items.Clear;
      if lvDemoTree.Items.Count <> 0 then
        lvDemoTree.Items.Clear;
    end;procedure TfrmDemoTree.mmOperate_CnDBClick(Sender: TObject);
    begin
      ConnectDB;
    end;procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);
    //用递归一次性生成所有树节点
    var
      idTemp:integer;
      strSQL:string;
      qryTemp:TQuery;
      TrNodeTemp:TTreeNode;
    begin
      TrNodeTemp := mP_TreeNode;
      qryTemp := TQuery.Create(self);
      try
        strSQL := ' select id,name '
                + ' from Tcity '
                + ' where Parentid='+inttostr(mpid);
        ExecQry(strSQL,qryTemp,true);
        while not qryTemp.Eof do
        begin
          idTemp := qryTemp.fieldbyname('id').AsInteger;
          tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString);
          BuildTree(tvDemoTree.Selected,idTemp);
          qryTemp.Next;
        end;
      finally
        qryTemp.Free;         //释放资源
      end;
    end;procedure TfrmDemoTree.InitListView;
    //初始化ListView
    var
      name,strSQL:string;
      lvItem:TListItem;
      Tempqry:TQuery;
    begin
      Tempqry := TQuery.Create(self);
      try
        lvDemoTree.Items.Clear;       //清空
        name := tvDemoTree.Selected.Text;
        strSQL := ' select id '
                + ' from Tcity '
                + ' where name='''+name+'''';
        ExecQry(strSQL,dmDemoTree.qryLV,true);
        if not dmDemoTree.qryLV.Eof then
        begin
          strSQL := ' select * '
                  + ' from Tcity where parentid='
                  + inttostr(dmDemoTree.qryLV.fieldbyname('id').asinteger);
          ExecQry(strSQL,dmDemoTree.qryLV,true);
          while not dmDemoTree.qryLV.Eof do
          begin
            lvItem := lvDemoTree.Items.Add;
            lvItem.Caption := inttostr(dmDemoTree.qryLV.fieldbyname('id').AsInteger);
            lvItem.SubItems.Add(dmDemoTree.qryLV.fieldbyname('name').AsString);
            strSQL := ' select name '
                    + ' from Tcity '
                    + ' where id='
                    + inttostr(dmDemoTree.qryLV.fieldbyname('parentid').AsInteger);
            ExecQry(strSQL,Tempqry,true);
            lvItem.SubItems.Add(Tempqry.fieldbyname('name').AsString);
            dmDemoTree.qryLV.Next;
          end;
        end;
      finally
        Tempqry.Free;
      end;
    end;procedure TfrmDemoTree.InitTree;
    begin
      tvDemoTree.Items.BeginUpdate;
      tvDemoTree.Items.Clear;
      BuildTree(nil,0);
      tvDemoTree.Items.EndUpdate;
    end;procedure TfrmDemoTree.mmFile_ExitClick(Sender: TObject);
    begin
      close;
    end;procedure TfrmDemoTree.toolbtnExitClick(Sender: TObject);
    begin
      close;
    end;procedure TfrmDemoTree.tvDemoTreeClick(Sender: TObject);
    begin
      if tvDemoTree.Items.Count <> 0 then   //对数为空进行特殊处理
      begin
        lvDemoTree.Items.BeginUpdate;
        InitListView;
        lvDemoTree.Items.EndUpdate;
      end;
    end;procedure TfrmDemoTree.toolbtnBuildTreeClick(Sender: TObject);
    begin
      InitTree;
    end;procedure TfrmDemoTree.mmOperate_BuildTreeClick(Sender: TObject);
    begin
      InitTree;
    end;procedure TfrmDemoTree.tvDemoTreeMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    This is a TreeView!';
    end;procedure TfrmDemoTree.lvDemoTreeMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    This is a ListView!';
    end;procedure TfrmDemoTree.toolbtnExitMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    关闭按钮,退出请点击!';
    end;procedure TfrmDemoTree.toolbtnCnDBMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    连接数据库按钮,需要连接数据库请点击!';
    end;procedure TfrmDemoTree.toolbtnDiscnDBMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    断开数据连接按钮,需要断开数据库请点击!';
    end;procedure TfrmDemoTree.toolbtnBuildTreeMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '    树生成按钮,需要生成树节点请点击!';
    end;procedure TfrmDemoTree.toolbDemoTreeMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      sbDemo.SimpleText := '';
    end;procedure TfrmDemoTree.sbDemoMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      sbDemo.SimpleText := '';
    end;end.
    其他的添加,查找你就自己
      

  5.   

    TreeView1.items.BeginUpdate;
      query1.close;
      query1.sql.add(Select * from aa);
      query1.first;
      while not query1.eof do
      begin
        if qurey1.feildvalues['node_key']=0 then
          TreeAddItem(TreeView1, GetFieldList, query1.getBook, false);
        query1.next;
      end;  FieldList.clear;
      TreeView1.Alphasort;
      TreeView1.items.Endupdate;//make first record selected:
      TreeView1.items[0].selected := true;送一个函数
    function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
    var
      ThisNode, Node: TTreeNode;
      I: Integer;
    begin
      Node := nil; //nil = level 0 has no parent node
                        //this is checked by TreeFindItem
      for I := 0 to Itemlist.count - 1 do
      begin
        ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
        if ThisNode <> nil then Node := ThisNode else
        begin
          if I < Itemlist.count - 1 then
          begin
            if (I = 0)
              then Node := Sender.items.Add(Node, Itemlist[i])
            else if length(itemlist[i]) <> 0 then
              Node := Sender.items.AddChild(Node, Itemlist[i]);
          end else
          begin
            if (I = 0)
              then Node := Sender.items.AddObject(Node, Itemlist[i], Book)
            else if length(itemlist[i]) <> 0 then
              Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
          end;
          Node.stateIndex := Node.level + 1;
          if Resort and (Node.parent <> nil) then Node.parent.alphasort;
        end;
      end;
      Result := Node;
    end;