第十讲 TreeView无限级分类

来源:互联网 发布:现在软件行业怎么样 编辑:程序博客网 时间:2024/06/01 13:42
主要内容

    Page_Load事件中有代码,建议使用使用Page.IsPostBack

    掌握TreeView动态加载数据的两种实现方式
        数据绑定介绍
        1. 嵌套循环(不建议)
            实例操作
        public void Nodes()
        {
            //获取省份信息
            string provinceSql = "select * from Province";
            DataSet ds = DBHelper.ExecuteDataSet(provinceSql, "province");
            foreach (DataRow row in ds.Tables["province"].Rows)
            {
                //创建节点对象
                TreeNode tn = new TreeNode();
                tn.Text = row["Name"].ToString();//设置省节点名称

                //接下来处理子节点
                string citySql = "select * from City where ProvinceID="+Int32.Parse(row["ProvinceID"].ToString());
                DataSet cityDS = DBHelper.ExecuteDataSet(citySql, "city");
                foreach (DataRow r in cityDS.Tables["city"].Rows)
                {
                    TreeNode cityNode = new TreeNode();
                    cityNode.Text = r["Name"].ToString();//设置城市节点名
                    tn.ChildNodes.Add(cityNode);//将子节点添加到对应省份中
                }

                //最后将省信息添加到树上去
                TreeView1.Nodes.Add(tn);
            }
        }

        缺点:是如果需要在子节点下面再添加孙节点时,就需要修改代码再嵌套循环,如果层级多的话,代码也同样会变得复杂。
        为了解决这个问题,就有了下面的递归方式:


        2. 递归加载,无限级。。。(常用的一种方法,重点推荐)
            实例操作
        protected void Page_Load(object sender, EventArgs e)
        {
            string sql = "select * from Nodes";
            DataSet dsNode = DBHelper.ExecuteDataSet(sql, "n");
            Session["node"] = dsNode;
            InitTree(this.TreeView1.Nodes, "0");
        }

        public void InitTree(TreeNodeCollection tnc, string  i)
        {
            DataView dv = new DataView();
            dv.Table = (Session["node"] as DataSet).Tables["n"];
            dv.RowFilter = "Classes=" + i;
            foreach (DataRowView drv in dv)
            {
                TreeNode tn = new TreeNode();
                tn.Value = drv["id"].ToString();
                tn.Text = drv["Name"].ToString();
                tnc.Add(tn);
                InitTree(tn.ChildNodes, tn.Value);
            }
        }

       
0 0
原创粉丝点击