我觉得可以这样做,先将数据读出来,然后手工往treeview中添
如 TreeNode trnode=null;TreeNode trnode1=null;
  trnode=new TreeNode("...");
treeView.Nodes.Add(trnode);      //加根结点
for (...);
{ trnode1=new TreeNode("..."); 
  trnode.Add(trnode1);             //加子结点
}
treeView.Tag  是一个object,你可以只定义一个类用于存储相关信息,用tag指向它,当点击结点时再在listview中显示不知这样行不行

解决方案 »

  1.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;
    using System.Data.SqlClient;
    namespace TreeCS
    {
    /// 
    /// WebForm1 的摘要说明
    /// 
    public class WebForm1 : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 定义数据库连接
    SqlConnection CN = new SqlConnection();
    try 
    {
    //初始化连接字符串
    CN.ConnectionString=
    "data source=pmserver;initial catalog=Bench;persist security info=False;user id=sa;Password=sa;";
    CN.Open(); SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
    DataSet ds=new DataSet();
    adp.Fill(ds);
    this.ViewState["ds"]=ds; 
    }
    catch (Exception ex)
    {
    Session["Error"] = ex.ToString();
    Response.Redirect("error.aspx");       //̀跳转程序的公共错误处理页面
    }
    finally 
    {
    CN.Close();
    }
    //调用递归函数,完成树形结构的生成
    AddTree(0, (TreeNode)null);
    } //递归添加树的节点
    public void AddTree(int ParentID,TreeNode pNode) 
    {
    DataSet ds=(DataSet) this.ViewState["ds"]; 
    DataView dvTree = new DataView(ds.Tables[0]);
    //过滤ParentID,得到当前的所有子节点
    dvTree.RowFilter =  "[PARENTID] = " + ParentID; foreach(DataRowView Row in dvTree) 
    {
    TreeNode Node=new TreeNode() ;
    if(pNode == null) 
    {    //添加根节点
    Node.Text = Row["ConText"].ToString();
    TreeView1.Nodes.Add(Node);
    Node.Expanded=true;
    AddTree(Int32.Parse(Row["ID"].ToString()), Node);    //再次递归

    else 
    {   //̀添加当前节点的子节点
    Node.Text = Row["ConText"].ToString();
    pNode.Nodes.Add(Node);
    Node.Expanded = true;
    AddTree(Int32.Parse(Row["ID"].ToString()),Node);     //再次递归
    }
    }                   
    }             #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    ///设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  2.   

    上面的例子是NET平台下Web树形结构程序设计,你可以参考
      

  3.   

    我得代码。b/s中
    private void InitTree(TreeNodeCollection Nds,string parentId)
    {
    DataView dv=new DataView();
    //DataTable dt=(DataTable) this.ViewState["ds"]; 
    TreeNode tmpNd;
    string intId;
    string strName;
    string strId;
    StringBuilder strTable = new StringBuilder();  dv.Table=datatable;
    dv.RowFilter="MENU_PARENTID='" + parentId + "'" ;
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode(); strName = drv["MENU_NAME"].ToString();
    strId = drv["MENU_ID"].ToString();
    tmpNd.ID=strId; if(strId!="0")
    {
    strTable.Append("&nbsp;.<a href='#a' onclick=\"javascript:main.location.href='addmenu_detail.aspx?id="+tmpNd.ID+"'\">");
    strTable.Append(strName);
    strTable.Append("</a><br>");
    tmpNd.Text=strTable.ToString();
    strTable.Remove(0,strTable.Length);

    }
    else
    {
    tmpNd.Text = strName;

    }

    Nds.Add(tmpNd);
    intId=drv["MENU_PARENTID"].ToString();
    InitTree(tmpNd.Nodes,tmpNd.ID);

    }
    }
    开始调用时InitTree(TreeView1.Nodes,"最顶层根节点");你把onclick事件改一改,使datagrid显示传的值或ID
      

  4.   

    从数据库中取出数据,将需要的字段逐个加入TreeView,然后在每个Node的Tag里加入该数据的唯一标识,可以是任何类型的数据,当单击节点的时候,取出该节点的Tag信息,在从数据库中取出相应数据填充DataGrid。