我想做一个树结构,通过数据库生成内容。
如:表A
ID   PID   Name
1    0     a
2    1     a1
3    1     a2
4    0     b
5    4     b1
6    0     c
ID为自加,PID为父ID
结果为:
a---a1
 ---a2
b---b1
c
请问用treeview控件怎样实现?

解决方案 »

  1.   

    查到表中所有数据,按PID排序,升序!
    依次读记录,如PID为0 ,则建第一级节点并在节点的data属性记录下ID
    如PID不为0,在已建好的节点中找到data属性(ID)等于现在PID的节点,在该节点下建立子节点,同样,要用data属性记录下......
    数据读完,树也就见好了
      

  2.   

    这是我的代码:procedure TBOMListForm.CreateTree;
    var
      Node_Root ,
      Node_Parent :TTreeNode;
      str_SQL ,
      Str_Parent: String;
    begin
      {清除掉TREEVIEW中的所有结点}
      BOMTreeView.Items.Clear;
      {生成TREEVIEW的根结点}
      Node_Root := BOMTreeView.Items.AddChild(NIL,'*'+DataModule1.CompanyName+'物料清单');
      Node_Parent := Node_Root;
      Str_SQL := 'Select THISID || '+ '''--''' + ' || THISNAME || '+'''##'''+' || BILLNO as fieldcurrent,';
      Str_SQL := Str_SQL +' THISID as fieldparent ' ;
      Str_SQL := Str_SQL + 'from SC_BOMTABLE where ACCOUNTID = '''+ DataModule1.ZhangTao + '''';  Str_Parent := 'PARENTID=' + '''*''';
      {遍历数据表,根据表内容生成TREEVIEW的内容}
      Addtreenode(DataModule1.ADOConnection1,BOMTreeView,Node_Parent,Str_SQL,Str_Parent);
      BOMTreeView.Select(Node_Root);
    end;
      

  3.   

    好文!这是一种常用的技巧
    还有一种办法是,是用散列表,
    我在java与perl中用到的,可惜delphi没有