private void BindTreeView(TreeNodeCollection tdc,string father_id,Config aConfig)
{
TreeNode node;
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
int iRow=aConfig.GetRowCount(str_sql);
for(int i=0;i<iRow;i++)
{
node=new TreeNode();
node.SelectedImageUrl=".\\images\\open.gif";
node.ImageUrl=".\\images\\dot.gif";
node.ID=aConfig.ds.Tables[0].Rows[i][0].ToString();
node.Text=aConfig.ds.Tables[0].Rows[i][1].ToString();
node.Expanded=true;
tdc.Add(node);
BindTreeView(node.Nodes,aConfig.ds.Tables[0].Rows[i][0].ToString(),aConfig);
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
aConfig.Fill(str_sql);
}
aConfig.Close();
}

解决方案 »

  1.   

    去查查msdn上的treenode及nodes的用法吧,问题应该不是很难。
      

  2.   

    lxcc(虫子|专注于抢分)   的方法真的不错!
      

  3.   

    CSDN左边的导航条差不多,deeptree
      

  4.   

    参考一下:
     struct data1
    {
    public int id;
       public int m_id;//可以不要
    public string t_id;//可以不要
    };........
    private void button1_Click_1(object sender, System.EventArgs e)
    {
    mycnn=new OleDbConnection(@"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=f:\dazhu2.mdb");mycnn.Open();
    if(mycnn.State==System.Data.ConnectionState.Open)
    {MessageBox.Show("  数据库连接成功 !");
    OleDbDataAdapter mya=new OleDbDataAdapter("select * from t1 order by m_id,t_id,[order]",mycnn);
    DataSet mydataset=new DataSet();
    mya.Fill(mydataset,"one");//填充数据DataTable  mytable=mydataset.Tables[0];
    //向TREEVIEW 中填充数据
    TreeNode newnode=null;
                    
    foreach(DataRow r in mytable.Rows)
    {
    data1 mydata;
                         newnode=new TreeNode();
    newnode.Text=r[4].ToString();
        mydata.id=int.Parse(r[0].ToString());
                         mydata.m_id=int.Parse(r[1].ToString());
    mydata.t_id=r[2].ToString();newnode.Tag=(object)mydata;if(int.Parse(r[1].ToString())==1)
    {
    this.treeView1.Nodes.Add(newnode);
    }
    else
    {
    TreeNode node1=null;
    int i=int.Parse(r[2].ToString());
    foreach(TreeNode nd in this.treeView1.Nodes)
    {
             node1=find_node(nd,i);  
    if(node1!=null)
    {
    this.treeView1.SelectedNode=node1;
    this.treeView1.Focus();
    //add node
    this.treeView1.SelectedNode.Nodes.Add(newnode);
    break;}}
    if(node1==null)
    {
    MessageBox.Show("未找到相应的结点");
    }
    }}}
    else
    MessageBox.Show("  数据库连接失败 !");   
    }        //递归的方法
    private TreeNode find_node(TreeNode a,int b)
    {
    TreeNode findnode=null;
    object o=a.Tag;
    data1 mydata=(data1)o;
    string m=mydata.id.ToString();
    string n=b.ToString();if(m==n)
    {
    findnode=a;
    }
    else
    {
    foreach(TreeNode nd in a.Nodes)
    {
                      findnode=find_node(nd,b);
    if(findnode!=null)
    {
    break;
    }
    }}
    return findnode;
    }
      

  5.   

    我根据 wangxiuquan2004() 的代码,自己改了改,实现了,谢谢大家
      下面是代码
    private void BindTreeView(TreeNodeCollection Nodes,string StrSql,SqlConnection objcon)
    {
    TreeNode objNode;
    objAdapter = new SqlDataAdapter(StrSql.Trim(),objcon);
    DataSet objds = new DataSet();
    try
    {
    objAdapter.Fill(objds,"archive_ctg");
    int nCount = objds.Tables["archive_ctg"].Rows.Count;
    if(nCount != 0)
    {
    for(int i = 0 ; i < nCount ; i++)
    {
    DataRow objCRow = objds.Tables["archive_ctg"].Rows[i];
    if(objAy.IndexOf(objCRow["archive_ctg_no"].ToString().Trim(),0) == -1)
    {
    objNode = new TreeNode();
    objNode.Tag = objCRow["archive_ctg_no"].ToString().Trim();
    objNode.Text = objCRow["archive_name"].ToString().Trim();
    Nodes.Add(objNode);
    string StrSqlChild = "Select * From Archive_ctg Where parent_no = '" + objCRow["archive_ctg_no"].ToString().Trim() + "'";
    objAy.Add(objCRow["archive_ctg_no"].ToString().Trim());
    //递归
    BindTreeView(objNode.Nodes,StrSqlChild.Trim(),objcon);
    }
    }
    }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message.Trim(),"信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
      

  6.   

    在程序的构造函数里定义了一个ArrayList objAy;
    用来记录每个节点的ID,一避免重复添加已经加过的节点