不太明白,是用的TreeView控件吗?

解决方案 »

  1.   

    http://dev.csdn.net/develop/article/23/23267.shtm
      

  2.   

    可以利用TreeView1_SelectedIndexChange事件,你的意思是不是当选择一个父结点时,再动态添加属于该父结点的子结点?
      

  3.   

    给你一个我手中的例子:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;  
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace myoa
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Data.OleDb.OleDbConnection oleDbConnection1;
    protected System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
    protected System.Data.DataSet dataSet1;
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    DataSet ds=new DataSet();
    public string objConn;
    //public string objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"\\dATABASE\\myoa.mdb";
    OleDbConnection MyConn;
    OleDbDataAdapter mycommand; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //TreeView1.Width=100;
    //TreeView1.Height=450;   
    objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("dATABASE\\myoa.mdb");
    string NodeText="-1";
    MyConn=new OleDbConnection(objConn);  
    mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeText+"' order by NodeNumber asc",MyConn);
    MyConn.Open();
    mycommand.Fill(ds);
    int i;
    //===根结点数
    for(i=0;i<ds.Tables[0].Rows.Count;i++)
    {
    Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
    //dim myTreeNode as new Microsoft.Web.UI.WebControls.TreeNode()
    myTreeNode.Text=ds.Tables[0].Rows[i].ItemArray[1].ToString() ;
    myTreeNode.ImageUrl="images/closedfolder.gif";
    myTreeNode.ExpandedImageUrl="images/openfolder.gif";
    myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNode.Text;
    myTreeNode.Target="mainFrame";
    TreeView1.Nodes.Add(myTreeNode);
    //Response.Write( ds.Tables[0].Rows[i].ItemArray[0].ToString());
    //Response.Write("<br/>");
    //Response.Write( ds.Tables[0].Rows[i].ItemArray[1].ToString());
    CreateChildTree(myTreeNode,ds.Tables[0].Rows[i].ItemArray[0].ToString() ,ds.Tables[0].Rows[i].ItemArray[1].ToString() );
    }
    //end sub
    }
    public void CreateChildTree(Microsoft.Web.UI.WebControls.TreeNode ParentNode,string NodeId ,string ParentNodeText)
    {
    mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeId+"' order by NodeNumber desc",MyConn);
    //MyConn.Open();
    mycommand.Fill(ds,"second");
    int i;
    for(i=0;i<ds.Tables["second"].Rows.Count;i++)
    {
    Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
    myTreeNode.Text=ds.Tables["second"].Rows[i].ItemArray[1].ToString();  
    myTreeNode.ImageUrl="images/book.gif";
    string myTreeNodeText =myTreeNode.Text;
    string ParentNodeTextS =ParentNodeText;
    //myTreeNodeText=Server.UrlEncode(myTreeNodeText);
    //ParentNodeTextS=Server.UrlEncode(ParentNodeTextS);
    myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNodeText+"&ParentNodeText="+ParentNodeTextS;
    myTreeNode.Target="mainFrame";
    ParentNode.Nodes.Add(myTreeNode);

    }
    ds.Tables["second"].Clear(); 
    } #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.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
    this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
    this.dataSet1 = new System.Data.DataSet();
    ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
    // 
    // dataSet1
    // 
    this.dataSet1.DataSetName = "NewDataSet";
    this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN");
    this.Load += new System.EventHandler(this.Page_Load);
    ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit(); }
    #endregion
    } //public Sub resize()
    }
      

  4.   

    很多的时候都是递归调用函数来构造节点,你把父节点传入到函数中,而后到数据库中搜寻符合的数据来构造子节点using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;  
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace myoa
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Data.OleDb.OleDbConnection oleDbConnection1;
    protected System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
    protected System.Data.DataSet dataSet1;
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    DataSet ds=new DataSet();
    public string objConn;
    //public string objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"\\dATABASE\\myoa.mdb";
    OleDbConnection MyConn;
    OleDbDataAdapter mycommand; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //TreeView1.Width=100;
    //TreeView1.Height=450;   
    objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("dATABASE\\myoa.mdb");
    string NodeText="-1";
    MyConn=new OleDbConnection(objConn);  
    mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeText+"' order by NodeNumber asc",MyConn);
    MyConn.Open();
    mycommand.Fill(ds);
    int i;
    //===根结点数
    for(i=0;i<ds.Tables[0].Rows.Count;i++)
    {
    Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
    //dim myTreeNode as new Microsoft.Web.UI.WebControls.TreeNode()
    myTreeNode.Text=ds.Tables[0].Rows[i].ItemArray[1].ToString() ;
    myTreeNode.ImageUrl="images/closedfolder.gif";
    myTreeNode.ExpandedImageUrl="images/openfolder.gif";
    myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNode.Text;
    myTreeNode.Target="mainFrame";
    TreeView1.Nodes.Add(myTreeNode);
    //Response.Write( ds.Tables[0].Rows[i].ItemArray[0].ToString());
    //Response.Write("<br/>");
    //Response.Write( ds.Tables[0].Rows[i].ItemArray[1].ToString());
    CreateChildTree(myTreeNode,ds.Tables[0].Rows[i].ItemArray[0].ToString() ,ds.Tables[0].Rows[i].ItemArray[1].ToString() );
    }
    //end sub
    }
    public void CreateChildTree(Microsoft.Web.UI.WebControls.TreeNode ParentNode,string NodeId ,string ParentNodeText)
    {
    mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeId+"' order by NodeNumber desc",MyConn);
    //MyConn.Open();
    mycommand.Fill(ds,"second");
    int i;
    for(i=0;i<ds.Tables["second"].Rows.Count;i++)
    {
    Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
    myTreeNode.Text=ds.Tables["second"].Rows[i].ItemArray[1].ToString();  
    myTreeNode.ImageUrl="images/book.gif";
    string myTreeNodeText =myTreeNode.Text;
    string ParentNodeTextS =ParentNodeText;
    //myTreeNodeText=Server.UrlEncode(myTreeNodeText);
    //ParentNodeTextS=Server.UrlEncode(ParentNodeTextS);
    myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNodeText+"&ParentNodeText="+ParentNodeTextS;
    myTreeNode.Target="mainFrame";
    ParentNode.Nodes.Add(myTreeNode);

    }
    ds.Tables["second"].Clear(); 
    } #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.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
    this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
    this.dataSet1 = new System.Data.DataSet();
    ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
    // 
    // dataSet1
    // 
    this.dataSet1.DataSetName = "NewDataSet";
    this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN");
    this.Load += new System.EventHandler(this.Page_Load);
    ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit(); }
    #endregion
    } //public Sub resize()
    }
      

  5.   

    Private Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As 
                Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles 
                TreeView1.SelectedIndexChange        Dim SelectNd As TreeNode
            SelectNd = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)
            If SelectNd.Nodes.Count <= 0 Then ‘加这个判断是为防止重复添加子节点
                Dim ds As DataSet
                ds = ... '为根据选择节点(SelectNd.ID等)的数据,检索数据库返回包括子
                          节点信息的数据集
                Dim dv As New DataView()
                Dim drv As DataRowView
                dv.Table = ds.Tables(0)
                Dim tmpNd As TreeNode
                For Each drv In dv
                    tmpNd = New TreeNode()
                    tmpNd.ID = drv("ID")
                    tmpNd.Text = drv("Name")
                    tmpNd.NodeData = ...
                    tmpNd.NavigateUrl = ...
                    ......
                    SelectNd.Nodes.Add(tmpNd)
                    SelectNd.Expanded = True
                Next
            End If
    End Sub