我用一表结构如下:
id   name        parid01   管辖地区      0
0101  城北区       01
010101  街道1      0101
0102   江南区       01
010201  街道1       0102
请问怎样生成一棵树在treeview中?谢谢

解决方案 »

  1.   

    帮我看看这段代码的问题,我运行出错。
    procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
    var
      mLocalName: string;
      TreeNode: TTreeNode;
      Ads_Tmp: TADOQUERY;
      TREEVIEW1:TTREEVIEW;
    begin
      ADS_Tmp := TADOQUERY.Create(application);
      ADS_Tmp.ConnectionString  :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ldj;Data Source=LYY';
      with ADS_Tmp do
      begin
        Close;
        sql.Clear ;
        sql.Add (  'Select * from treeview Where PID =' + FNodeName);
        Open;
        First;
        while not Eof do
        begin
          mLocalName := FieldbyName('ID').Asstring;
          TreeNode := TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);
          CreateSubTree(mLocalName, TreeNode); 
          Next;
        end;
      end;
    end;
      
    调用//
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    CreateSubTree('0', nil);
    end;end.
      

  2.   

    TreeNode := TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);
       这句话有问题。
    你的parid是做什么用的。你的id号是不是分子级和父级的。如果是的话,比如2个长度为一级,你可以根据这个判断它在树中的位置和关系。。
      

  3.   

    我明白了mysummer2003 ()的意思,是要從數據庫中得到數據,然後生成這樣一棵樹嗎?-管轄區
      |
      -城北區
      |  |
      |  -街道1
      |
      -城南區
         |
         -街道2Treeview中的效果圖
      

  4.   

    (*//
    标题:数据集处理成可视树
    说明:处理父节点标识字段、节点文本字段、节点标识字段这种表结构
    设计:Zswang
    日期:2002-05-20
    支持:[email protected]
    //*)///////Begin Source
    function DataSetToTreeNode(mDataSet: TDataSet;
      mFieldNameParent: string; //父节点标识字段名
      mFieldNameTreeText: string; //节点文本字段名
      mFieldNameTreeId: string; //节点标识字段名
      mTreeView: TTreeView; mTreeNode: TTreeNode;
      mParentText: string): Boolean;
    var
      vTreeNode: TTreeNode;
      vFieldValues: Variant;
      vFieldNames: string;
    begin
      Result := False;
      if not Assigned(mDataSet) then Exit;
      if not Assigned(mTreeView) then Exit;
      if not mDataSet.Active then Exit;
      vFieldNames := Format('%s;%s;%s',
        [mFieldNameParent, mFieldNameTreeText, mFieldNameTreeId]);
      mDataSet.Filtered := False;
      mDataSet.Filter := Format('%s=%s', [mFieldNameParent, QuotedStr(mParentText)]);
      mDataSet.Filtered := True;
      if mDataSet.RecordCount = 0 then Exit;
      mDataSet.First;
      while not mDataSet.Eof do begin
        vTreeNode := mTreeView.Items.AddChild(mTreeNode,
          mDataSet.FieldByName(mFieldNameTreeText).AsString);
        vFieldValues := mDataSet[vFieldNames];
        DataSetToTreeNode(mDataSet, mFieldNameParent, mFieldNameTreeText,
          mFieldNameTreeId, mTreeView, vTreeNode,
          mDataSet.FieldByName(mFieldNameTreeId).AsString);
        ///////Begin 恢复位置
        mDataSet.Filtered := False;
        mDataSet.Filter := Format('%s=%s', [mFieldNameParent, QuotedStr(mParentText)]);
        mDataSet.Filtered := True;
        mDataSet.Locate(vFieldNames, vFieldValues, []);
        ///////End 恢复位置
        mDataSet.Next;
      end;
      Result := True;
    end;
    ///////End Source///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vADOQuery: TADOQuery;
    begin
      TreeView1.Items.Clear;  vADOQuery := TADOQuery.Create(nil);
      try
        vADOQuery.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ldj;Data Source=LYY';
        vADOQuery.SQL.Text := 'Select * from treeview';
        vADOQuery.Open;
        DataSetToTreeNode(vADOQuery, 'parid', 'name', 'id',
          TreeView1, nil, '0');
        vADOQuery.Close;
      finally
        vADOQuery.Free;
      end;
    end;
    ///////End Demo
      

  5.   

    樓主的過程沒錯,下面這句有問題:
    TreeNode := TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);TreeView1之前應加上Form1,我調試通過了,無錯誤。
    TreeNode := Form1.TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);