请教各位,我想动态的使用treeview,不知如何使用!谢谢~~

解决方案 »

  1.   

    public void ShowTreeView(int SelfID,TreeNode node)
    {
    DataSet myDataSet=new DataAccess.Nodes().SelectAllNodes();
    DataView dv = myDataSet.Tables[0].DefaultView; 
    dv.RowFilter = "FatherID=" + SelfID.ToString(); 
    TreeNode item; 

    foreach (DataRowView dr in dv) 

    if (node == null) 

    item = new TreeNode(); 
    item.Text=dr["NodeTitle"].ToString();
    treeView1.Nodes.Add(item);
    ShowTreeView(Convert.ToInt32(dr["SelfID"]), item);

    else 
    {  
    item = new TreeNode(); 
    item.Text=dr["NodeTitle"].ToString(); node.Nodes.Add(item); 
    ShowTreeView(Convert.ToInt32(dr["SelfID"]), item); 
    }
    }
    }
      

  2.   

    采用foreach的遍历加递归就可以实现搂住的要求!
      

  3.   

    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;
    using System.Configuration;namespace test
    {
    /// <summary>
    /// tree1 的摘要说明。
    /// </summary>
    public class tree1 : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    protected DataSet ds = new DataSet();
            protected SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
    protected string j_id;private void Page_Load(object sender, System.EventArgs e)
    {
    if (!this.IsPostBack)
    {
    //if (Session["sid"] != null)
    //{
    //j_id=Session["sid"].ToString();  // 获得用户
    CreateDataSet();
    CreateTree(this.TreeView1.Nodes,"");
    //}
    //else
    //{
    //Response.Write("<font color=red>没有找到要下载的文件</font>");
    //}}
    // 在此处放置用户代码以初始化页面
    }
    private void CreateDataSet()
    {   string strSql = " select * from q_Func, q_rolet_Func  where q_rolet_Func.role_id=(select roleid from q_consumer_role where userid=12 ) and q_Func.Func_id=q_rolet_Func.Func_id";
    conn.Open();
    SqlDataAdapter myAdapter = new SqlDataAdapter(strSql,conn);
    myAdapter.Fill(ds,"subTree");
    conn.Close();
    }
    private void CreateTree(Microsoft.Web.UI.WebControls.TreeNodeCollection TNCs,string strParentId)
    {
    Microsoft.Web.UI.WebControls.TreeNode tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();DataView dv = new DataView();
    dv.Table = ds.Tables[0];
    string strID;
    if (strParentId == "")
    {
    dv.RowFilter = "tree_ID is null";
    }
    else
    {
    dv.RowFilter = "tree_ID = "+strParentId;
    }
    foreach (DataRowView drv in dv)
    {
    tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();//定义结点
    strID = drv["func_id"].ToString();
    tmpTNCs.ID = strID;//定义结点ID
    tmpTNCs.Text = drv["NodeName"].ToString();//定义结点文字
    tmpTNCs.ImageUrl = "img/close.gif";//定义图片
    tmpTNCs.ExpandedImageUrl = "img/open.gif";//定义打开的图片
    if (strParentId == "")
    {
    tmpTNCs.NavigateUrl= null;
    tmpTNCs.Target= null;
    }
    else
    {
    tmpTNCs.NavigateUrl = drv["http_view"].ToString().Trim();
    tmpTNCs.Target = "main";
    }
    //tmpTNCs.NavigateUrl = "main.aspx?ID="+strID+"&ParentID="+drv["ParentID"].ToString();//定义结点联接
    TNCs.Add(tmpTNCs);//添加结点
    CreateTree(TNCs[TNCs.Count-1].Nodes,strID);//递归调用//选定某个结点
    if (Request.Params["id"]!=null)
    {
    if (strID == Request.Params["Id"].ToString())
    {
    //将选定结点的所有上级结点的Expanded属性全设为true,即展开结点
    string strNodeIndex = TNCs[TNCs.Count-1].GetNodeIndex();
    string[] strExpandLevel = strNodeIndex.Split('.');
    Microsoft.Web.UI.WebControls.TreeNode TN = this.TreeView1.Nodes[int.Parse(strExpandLevel[0])];
    TN.Expanded = true;
    for (int i=1;i<strExpandLevel.Length;i++)
    {
    int ii = int.Parse(strExpandLevel[i]);
    TN = TN.Nodes[ii];
    TN.Expanded = true;
    }
    //选定结点
    this.TreeView1.SelectedNodeIndex = strNodeIndex;
    }
    }
    }
    }
    #region Web 窗体设计器生成的代码
    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
    }
    }
    protected Microsoft.Web.UI.WebControls.TreeView tvwNaviIn;protected SqlConnection conn;
    protected SqlDataAdapter apt;
    protected DataSet ds;
    protected string strSql;private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
    string sConn = ConfigurationSettings.AppSettings["NCMT"];
    conn = new SqlConnection(sConn);CreateDataSet();
    InitNavigationTree(tvwNaviIn.Nodes,"0");
    }
    }//创建数据集
    private DataSet CreateDataSet()
    {
    strSql = "Select Distinct ID,F_NodeID,F_NodeName,F_ParentID,F_NavigateUrl,F_ImageUrl From T_Function Where  Order By a.ID";apt = new SqlDataAdapter(strSql,conn);
    ds = new DataSet();
    apt.Fill(ds,"dtNavigateIn");
    return ds;
    }//初始化导航树,通过递归调用显示子树
    private void InitNavigationTree(TreeNodeCollection tncCurrent,string sParentID)
    {
    DataView dvw = new DataView();
    TreeNode nodTemp;
    string strTempID;
    dvw.Table = ds.Tables["dtNavigateIn"];
    dvw.RowFilter = "F_ParentID = '" + sParentID + "'";
    foreach(DataRowView drv in dvw)
    {
    nodTemp = new TreeNode();
    nodTemp.ID = drv["F_NodeID"].ToString();
    nodTemp.Text = drv["F_NodeName"].ToString();
    nodTemp.NavigateUrl = drv["F_NavigateUrl"].ToString();
    nodTemp.ImageUrl = drv["F_ImageUrl"].ToString();
    nodTemp.Target = "MainIn";tncCurrent.Add(nodTemp);
    strTempID = drv["F_ParentID"].ToString();
    //递归调用
    InitNavigationTree(nodTemp.Nodes,nodTemp.ID);
    }
    }
    第三种方法
    int PreIDLength=0;
    TreeNode PreNode=new TreeNode();
    dataTable1.DefaultView.Sort="degree";
    treeView1.Nodes.Add(PreNode);
    for(int i=0;i<dataTable1.Rows.Count;i++)
    {
      TreeNode trnAdd=new TreeNode();
      trnAdd.Text=dataTable1.DefaultView[i]["name"].ToString().Trim();
      int IDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length;
      for(int j=0;j<=(PreIDLength-IDLength)/2;j++)
      {
        PreNode=PreNode.Parent;
      }
      PreNode.Nodes.Add(trnAdd);
      PreIDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length;
      PreNode=trnAdd;
    }