zoukankan      html  css  js  c++  java
  • 在 ASP.NET 页面中使用 TreeView 控件

    遍历节点 
    void GetAllNodeText(TreeNodeCollection tnc) 

     
    foreach(TreeNode node in tnc) 
     

      
    if(node.Nodes.Count!=0
       GetAllNodeText(node.Nodes); 
      Response.Write(node.Text 
    + " "); 
     }
     
    }
     

    建树 
    private void CreateTree(TreeNodeCollection folderTreeNodeCollection , string parentID) 

      
    if (parentID==""
      

        dv.RowFilter
    = "ParentID is null"
      }
     
      
    else 
      

        dv.RowFilter
    = "ParentID="+"'"+parentID+"'"
      }
     
      
    foreach (DataRowView drv in dv) 
      

        TreeNode tn
    = new TreeNode(); 
        tn.Expanded
    = true ; 
        tn.ID
    =drv.Row["TypeID"].ToString().Trim(); 
        tn.Text
    =drv.Row["TypeName"].ToString().Trim(); 
        folderTreeNodeCollection.Add(tn); 
        CreateTree(tn.Nodes,tn.ID); 
      }
     
    }
     

    遍历选中节点 
    private void getAllCheckedNode(TreeNodeCollection tnc) 

      
    foreach (TreeNode tn in tnc) 
      

        
    if (tn.Checked== true ) 
        

          Response.Write(tn.Text
    +””); 
        }
     
        
    if (tn.Nodes.Count>0
        

          getAllCheckedNode(tn.Nodes); 
        }
     
      }
     
    }
     

    选中或取消选中节点 , 自动选中或取消选中期子节点 
    private void CheckedChildNode(TreeNode tn) 

      
    if (tn.Nodes.Count>0
      

        
    foreach (TreeNode tnn in tn.Nodes) 
        

          tnn.Checked
    =tn.Checked; 
          CheckedChildNode(tnn); 
        }
     
      }
     
    }
     

    调用方法
    private void TreeView1_Check( object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e) 

        setAllCheckedNode(TreeView1.GetNodeFromIndex(e.Node)); 
    }
     

    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 源码来取消默认选中节点的方法*/

               }

     

               /// <summary>

               /// 添加节点及其包含的子节点

               /// </summary>

               /// <param name="dt">从数据库抓出的 DataTable</param>

               /// <param name="node">将要添加子节点的父节点</param>

               /// <param name="id">父节点的 ID,“0 为根节点</param>

               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(); //存放节点 ID

                         nd.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 True


    TreeView 控件属性→ 事件 双击展开(Expand


     

               private void Page_Load(object sender, System.EventArgs e)

               {

                    if(!IsPostBack)

                    {

                         this.AddSingleNode(null,"0"); //找出根节点

                    }

                    this.TreeView1.SelectedNodeIndex="";   //不选中任何节点

               }

     

               /// <summary>

               /// 展开节点时,触发的事件

               /// </summary>

               /// <param name="sender">TreeView 控件</param>

               /// <param name="e"></param>

               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); //加载子节点

                    }

               }

     

               /// <summary>

               /// 只查找、添加单个节点下的子节点

               /// </summary>

               /// <param name="node">需要添加子节点的 TreeNode</param>

               /// <param name="id">该节点的 NodeID </param>

               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(); //存放节点 ID

                         nd.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 文档创建 TreeView

    1、XML 文档的要求

    a)      描述节点名称是固定的“<treenodes></treenodes>”与“<treenode></treenode>

    b)      虽然 XML 文文件对字母的大小写严格区分,但绑定时会忽略

    c)      <treenode></treenode>节点中的属性,必须与 TreeView 控件中的 TreeNode 属性对应

    d)      <treenode></treenode>”节点中的文本不能写在节点内,只能以 Text”属性出现,如“<treenode>Node01</treenode>”行不通,应为“<treenode Text="Node01"></treenode>

    以下是一个可用于“TreeView”控件绑定源的范例﹕

    <?xml version="1.0" encoding="utf-8" ?>

    <TREENODES>

         <TREENODE Text="Node01">

               <TREENODE NavigateUrl="04.htm" Text="Node04"></TREENODE>

         </TREENODE>

         <treenode NavigateUrl="05.htm" text="Node05" NodeData="05" CheckBox="true"></treenode>

         <TREENODE NavigateUrl="03.htm" Text="Node03"></TREENODE>

    </TREENODES>

    2、绑定的代码

                    this.TreeView1.TreeNodeSrc="TreeXML.xml";

                    this.TreeView1.DataBind();

  • 相关阅读:
    Android ANR原因以及开发时如何预防
    Nmon工具的使用以及通过nmon_analyse生成分析报表
    LInux在线安装JDK
    linux使用JMETER进行分布式压力测试
    Jmeter-调整占用内存解决内存溢出
    参数化之利用CSV Data Set Config从文件读取参数并关联变量
    JMETER 定时器 之 常数吞吐量定时器
    【Jmeter】Jmeter聚合报告分析
    Nmon的安装及使用
    MySQL CURDATE() 函数
  • 原文地址:https://www.cnblogs.com/ghd258/p/292657.html
Copyright © 2011-2022 走看看