我在做一个ASP.NET的项目,必须要使用TreeView,但是我发现ASP.NET中的TreeView和C#中的TreeView用法完全不同,我是要从数据库中读出数据,再添加到TreeView中,请问怎么添加?

解决方案 »

  1.   

    ASP.NET最简单的例子,不过是VB的
        Private Sub LoadTree1()
            Dim myClassDepartment As New ClassDepartment(Application("ConnectString"))
            Dim myClassDepartmentData As ClassDepartmentData
            Dim myNode As Microsoft.Web.UI.WebControls.TreeNode
            Dim i As int64
            Dim myData As ArrayList = myClassDepartment.List(Session("LoginUserID"), " len(a.F12)=4 ")
            '加入行数据
            For i = 0 To myData.Count - 1
                '从数组中读取数据
                myClassDepartmentData = myData.Item(i)
                '新加入节点
                myNode = New Microsoft.Web.UI.WebControls.TreeNode
                myNode.CheckBox = True
                myNode.ID = myClassDepartmentData.F12
                myNode.Text = "<b>" & myClassDepartmentData.F3 & "</b>"
                If strsub(myClassDepartmentData.F12, Session("LoginUserDepartmentCode")) Then myNode.Expanded = True
                Call LoadTree2(myNode, myClassDepartment)
                treeDwxx.Nodes.Add(myNode)
            Next
            myClassDepartment.CloseDatabase()
            myClassDepartment = Nothing
        End Sub
        Private Sub LoadTree2(ByVal ParentNode As Microsoft.Web.UI.WebControls.TreeNode, ByVal myClassDepartment As ClassDepartment)
            Dim myClassDepartmentData As ClassDepartmentData
            Dim myNode As Microsoft.Web.UI.WebControls.TreeNode
            Dim i As int64
            Dim myData As ArrayList = myClassDepartment.List2(Session("LoginUserID"), " len(a.F12)=8 AND Left(a.F12,4)='" & ParentNode.ID & "'")
            '加入行数据
            For i = 0 To myData.Count - 1
                '从数组中读取数据
                myClassDepartmentData = myData.Item(i)
                '新加入节点
                myNode = New Microsoft.Web.UI.WebControls.TreeNode
                myNode.CheckBox = True
                myNode.ID = myClassDepartmentData.F12
                myNode.Text = "<b>" & myClassDepartmentData.F3 & "</b>"
                If strsub(myClassDepartmentData.F12, Session("LoginUserDepartmentCode")) Then myNode.Expanded = True
                Call LoadTree3(myNode, myClassDepartment)
                ParentNode.Nodes.Add(myNode)
            Next
        End Sub
      

  2.   

    strSQL="select distinct year(ConsignDate) as 年份 from PostInputInfo order by 年份 desc";

    DataTable dtTemp=ds.GetTable(strSQL,false);
    foreach(DataRow drTemp in dtTemp.Rows)
    {
    if(drTemp[0] !=DBNull.Value)
    {
    strYear=drTemp[0].ToString();
    TreeNode node1=new TreeNode();
    node1.Text =strYear + " 年";
    this.tvwSheet.Nodes.Add(node1);
    strSQL="select distinct month(ConsignDate) as 月份 from PostInputInfo where year(ConsignDate)=" + strYear + " order by 月份";
    DataTable dt=ds.GetTable(strSQL,false);
    foreach(DataRow dr in dt.Rows)
    {
    strMonth=dr[0].ToString();
    TreeNode node2=new TreeNode();
    node2.Text =strMonth + " 月";
    node1.Nodes.Add(node2); }
    }
    }
      

  3.   

    tv.BackColor = Color.White;
    tv.ExpandLevel = 3;
    tv.Nodes.Clear();
    TreeNode ParentTn = new TreeNode();
    tv.Nodes.Add(ParentTn );
    TreeNode tn = new TreeNode();
    ParentTn.Nodes.Add(tn);
      

  4.   

    private void LoadTree()
    {
    //Initial root node
    TreeNode aTreeNode = new TreeNode();
    //aTreeNode.Text = Session["LessionName"].ToString();
    aTreeNode.Text = Session["LessonName"].ToString();
    aTreeNode.ImageUrl="images/root.gif";
    aTreeNode.SelectedImageUrl="images/root.gif";
    aTreeNode.Target = "FraMain";
    //
    //aTreeNode.NavigateUrl = "admin/ContentAddSub.aspx?LessonID="+Server.UrlEncode(Session["LessonID"].ToString());
    aTreeNode.NavigateUrl = "Content.aspx?LessonID="+Server.UrlEncode("101");

    aTreeView.Nodes.Add(aTreeNode);
    aTreeView.Nodes[0].Expanded=true;
    //this.LoadChildNodes(aTreeNode,Session["LessonID"].ToString());
    this.LoadChildNodes(aTreeNode,"101");
    } private void LoadChildNodes(TreeNode parent,string LessonID)
    {
    TreeNode aTreeNode;
    string aLessionID;
    MenuClass aMenuClass = new MenuClass();
    DataTable dt = aMenuClass.GetMenuItem(LessonID).Tables[0];

    foreach(DataRow row in dt.Rows)
    {
    aLessionID = row.ItemArray[0].ToString();

    aTreeNode = new TreeNode();
    aTreeNode.Text = row.ItemArray[1].ToString();
    aTreeNode.Target = "FraMain";
    //
    aTreeNode.NavigateUrl = "Content.aspx?LessonID="+Server.UrlEncode(aLessionID);
    parent.Nodes.Add(aTreeNode);
    if(row.ItemArray[2].ToString()=="1")
    {
    LoadChildNodes(aTreeNode,aLessionID);
    }
    }
    }
      

  5.   

    从数据库读取节点信息保存节点信息的 Table 基本结构为1、全部读取并一次性展现private void Page_Load(object sender, System.EventArgs e){if(IsPostBack){return;}DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");DataTable dt = tmp.GetDataTable("select * from TreeView");//从数据库抓出数据this.AddNodes(dt,null,"0"); //添加节点this.TreeView1.SelectedNodeIndex=""; //不选中任何节点。/*下一节将介绍如何修改TreeView.cs 源码来取消默认选中节点的方法*/}/// /// 添加节点及其包含的子节点/// /// 从数据库抓出的 DataTable/// 将要添加子节点的父节点/// 父节点的 ID,“0” 为根节点private void AddNodes(DataTable dt,TreeNode node,string id){DataRow[] rows = dt.Select("ParentID="+id); //筛选出属于父节点 “node”的子节点集合foreach(DataRow dr in rows) //循环子节点集合{TreeNode nd = new TreeNode();nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址nd.NodeData=dr["NodeID"].ToString(); //存放节点 IDnd.Text=dr["NodeName"].ToString(); //设置节点名称this.AddNodes(dt,nd,nd.NodeData); //递归,添加该节点的子节点if(node==null || id=="0"){this.TreeView1.Nodes.Add(nd); //添加至根节点}else{node.Nodes.Add(nd); //添加子节点}}2、 展开节点时读取该节点的数据TreeView 控件属性→ 自动提交(AutoPostBack) → TrueTreeView 控件属性→ 事件 → 双击展开(Expand)private void Page_Load(object sender, System.EventArgs e){if(!IsPostBack){this.AddSingleNode(null,"0"); //找出根节点}this.TreeView1.SelectedNodeIndex=""; //不选中任何节点} /// /// 展开节点时,触发的事件/// /// TreeView 控件/// private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e){TreeNode nd = this.TreeView1.GetNodeFromIndex(e.Node); //找到触发事件的节点,即正在展开的节点if(nd.Nodes[0].NodeData=="") //第一次加载,即只有“正在加载……”这一项{this.AddSingleNode(nd,nd.NodeData); //加载子节点}}/// /// 只查找、添加单个节点下的子节点/// /// 需要添加子节点的 TreeNode/// 该节点的 NodeID private void AddSingleNode(TreeNode node,string id){if(node!=null && id!="0"){node.Nodes.Clear();//清空节点,主要是把“正在加载……”这一项移除}DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");DataTable dt = tmp.GetDataTable("select * from TreeView where ParentID="+id);//从数据库抓出数据foreach(DataRow dr in dt.Rows) //历遍所有子节点{TreeNode nd = new TreeNode();nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址nd.NodeData=dr["NodeID"].ToString(); //存放节点 IDnd.Text=dr["NodeName"].ToString(); //设置节点名称TreeNode child = new TreeNode(); //此节点只作为“nd”展开的依据,并无它意child.Text="正在加载……";nd.Nodes.Add(child);if(node==null|| id=="0"){this.TreeView1.Nodes.Add(nd); //添加至根节点}else{node.Nodes.Add(nd); //添加子节点}}}五、 修改“TreeView.cs”源码,取消 TreeView 默认选中节点1、TreeView.cs 文件在文中﹐找到 “ protected override void OnLoad(EventArgs e)”事件“ protected override void OnPreRender(EventArgs e)” 事件,修改以下代码if ((SelectedNodeIndex == "" || SelectedNodeIndex == String.Empty) && Nodes.Count > 0)//SelectedNodeIndex = "0"; //修改前SelectedNodeIndex = ""; //修改后2、TreeView.htc 文件在“C:\Inetpub\wwwroot\webctrl_client\1_0\ TreeView.htc”中找到“function ondocumentready()”把以下代码注释掉// verify selectedNodeIndex /****************** Change By Jerry On 2005-01-25 ******************/ /* if (getNodeFromIndex(selectedNodeIndex) == null) { if (getNodeFromIndex("0") != null) selectedNodeIndex = "0"; else selectedNodeIndex = ""; } */ /****************** Change By Jerry On 2005-01-25 ******************/在“function tryToBuildTreeFromRoot()”修改以下代码if (selectedNodeIndex.length == 0){ //prop_selectedNodeIndex = "0"; //修改前prop_selectedNodeIndex = ""; //修改后}3、使用修改“TreeView.cs”后,重新编译一次,生成新的“Microsoft.Web.UI.WebControls.dll”。应用时只需要设置“SelectedNodeIndex”为 “” 即可this.TreeView1.SelectedNodeIndex=""; //不选中任何节点。六、 使用 XML 文档创建 TreeView1、XML 文档的要求a) 描述节点名称是固定的“”与“” b) 虽然 XML 文文件对字母的大小写严格区分,但绑定时会忽略c) “”节点中的属性,必须与 TreeView 控件中的 TreeNode 属性对应d) “”节点中的文本不能写在节点内,只能以 “Text”属性出现,如“Node01”行不通,应为“”以下是一个可用于“TreeView”控件绑定源的范例﹕
    2、绑定的代码this.TreeView1.TreeNodeSrc="TreeXML.xml";this.TreeView1.DataBind();