• 关于TreeView的实例


    前台代码 (只需要有TreeView控件, 添加ID,其他默认生成)

    <form id="form1" runat="server">
    <div>

    <asp:treeview ID="tree1" ExpandDepth="0" runat="server" />
    </div>
    </form>

    后台代码 

        Page_Load代码

    1         private string myConn = ConfigurationManager.ConnectionStrings["connectionString0"].ConnectionString;
    2         protected void Page_Load(object sender, EventArgs e)
    3         {
    4             if (!IsPostBack)
    5             {
    6                 BindTree(tree1);
    7             }
    8         }
    View Code

        获取节点

            /// <summary>
            /// 获得节点   1--当前元素的第几层   2--上级ID   3--更改的数据集
            /// </summary>
            /// <param name="upDegree">当前元素的第几层</param>
            /// <param name="upID">上级ID</param>
            /// <param name="ds">更改的数据集</param>
            /// <returns>是否成功</returns>
            private bool getNode(int upDegree, string upID, ref DataSet ds) {
                string myQuery = " select model_ID, model_name, up_ID, degree from Model where degree='" + upDegree + "' and up_ID='" + upID + "';";
                SqlConnection conn = new SqlConnection(myConn);
                conn.Open();
                SqlDataAdapter da = new SqlDataAdapter(myQuery, conn);
                da.Fill(ds);
                conn.Close();
                if (ds.Tables[0].Rows.Count>0)
                {
                    return true;
                }
                return false;
            }
    View Code

      

        绑定子节点

     1         /// <summary>
     2         /// 绑定子节点  1--父节点所处级别    2--父节点   return Bool是否有子节点
     3         /// </summary>
     4         /// <param name="upDegree">第几级</param>
     5         /// <param name="tn">父节点</param>
     6         /// <returns>是否有子节点</returns>
     7         private bool BindChild(int Degree, TreeNode tn){
     8             DataSet ds = new DataSet();
     9             getNode(Degree+1, tn.Value, ref ds);    //  获取节点列表   比当前节点更多
    10             DataTable dt = ds.Tables[0];            //  加快ds的读取速度
    11             TreeNode tn2 = new TreeNode();          //  新增子节点
    12 
    13             int len = dt.Rows.Count;                //  子节点数量
    14             bool flag = false;                      //  是否有子节点   false--无子节点   true--有子节点
    15             for (int i = 0; i < len; i++)
    16             {
    17                 tn2 = new TreeNode(dt.Rows[i][1].ToString(), dt.Rows[i][0].ToString());   //  生成需要绑定的节点
    18                 tn.ChildNodes.Add(tn2);             //  增加子节点
    19                 BindChild(Degree + 1, tn2);         //  循环绑定子节点
    20                 flag = true;       //  有子节点
    21             }
    22             if (!flag)     //  当没有叶子节点(最底层的节点)时, 则添加超级链接
    23             {
    24                 tn.NavigateUrl = "http://www.baidu.com";
    25                 tn.Target = "_blank";
    26             }
    27                 //  销毁占用内存的空间
    28             dt.Dispose();
    29             ds.Dispose();
    30             return flag;
    31         }
    View Code

        绑定TreeView树

     1         /// <summary>
     2         /// 绑定TreeView树   1--treeview的节点ID
     3         /// </summary>
     4         /// <param name="tv"></param>
     5         private void BindTree(TreeView tv)
     6         {
     7             tv.Nodes.Clear();            //  初始化TreeView
     8 
     9             TreeNode tn = new TreeNode();
    10             DataSet ds = new DataSet();  //  获取子节点
    11             getNode(1, "00", ref ds);    //  获取一级节点
    12             DataTable dt = ds.Tables[0]; //  DataTable的读取速度快与DataSet;
    13 
    14             int len = dt.Rows.Count;
    15             for (int i = 0; i < len; i++)    //  绑定节点TreeNode
    16             {
    17                 tn = new TreeNode(dt.Rows[i][1].ToString(), dt.Rows[i][0].ToString());   //  
    18                 if (!BindChild(1, tn))    //  当无子节点的时候,链接百度,也可以设置ViewState的值
    19                 {
    20                     tn.NavigateUrl = "http://www.baidu.com";
    21                     tn.Target = "_blank";
    22                 }
    23                 tv.Nodes.Add(tn);   //  将节点添加到原来的TreeView中
    24             }
    25             //  销毁占用内存的空间
    26             dt.Dispose();
    27             ds.Dispose();
    28         }
    View Code

      心得体会 :  也许这个效率很低,不过这个也是我自己写的简单的一部分。整个过程跟DropDownList很像,可以参照添加DropDownList的方法添加;

      设计思路 :  

            首先,先写出关于获取节点的方法, 里面有只需要三个值 当前的模块等级, 模块ID, 模块名字

            第二,绑定一级栏目(一级栏目的绑定相对于子节点较为特殊),所以单独写一个方法,当然写成一个方法也是可以。边绑定要判断是否有子节点,如果无子节点则绑定超级链接。

            第三,绑定二级栏目、跟一级栏目的获取差不多,

            第四, 第一次显示时,模块只需要显示一级模块 即(tree1.ExpandDepth=0)。其他模块默认隐藏

      替换方法 : 如果第一次读取数据库时生成XML文件,这样是否可以加快速度,可以减缓对数据库的读取速度。使用XML的方法生成树图,以后再学习.Ending.

  • 相关阅读:
    前端页面如何添加图标
    前端的百度地图的api的使用
    Jackson /常用注解/ annotation(转)
    spring mvc 全局处理异常
    java项目http变更https
    maven 项目配置到tomcat不能正常启动
    cxf-webservice完整示例
    web.xml中配置spring配置(application.xml)文件
    webService 总结
    gitHub新项目的上传
  • 原文地址:https://www.cnblogs.com/xxjudfc/p/3460482.html
Copyright © 2020-2023  润新知