.NET下拉框DropDownList层级实现
2020-11-15 04:38
                         标签:com   http   blog   style   class   div   img   code   java   javascript   tar                        .NET下拉框DropDownList层级实现     这也算是第一篇博客吧,技术比较菜,写得不好,希望各位博友见谅哈,多多提提意见。     今天做电商网站新闻添加的时候,下拉框选择新闻类别觉得太长,又无法定位其准确级别,让人甚是苦恼,于是想做一个层级的下拉框,刚开始的时候想到了用递归树去实现,之前写过递归树,觉得应该可以,便试了一下,递归树代码如下: 注释已经写的很清楚了,不用我多说了吧,调用方法如下: 运行结果,确实可以出来,运行结果如图所示:   可以看到,虽然测试权限2在测试权限3下,但是依旧会出现和他同级的情况,查看代码可知: 参考上面递归代码不难看出,根节点加载没有问题,但是子节点,加载永远只有else,就是说,不管多少级,都走else,不会延伸出别的,想过通过定义级别来实现,但又要用到swicth来实现,太多的话,反而实现不了,扩展性不好,于是,网上找了一下资料,用了也是递归方式,跟这个也差不多,代码如下: 这段代码调用方法: 完成之后,运行结果如图所示: 致辞,多层级下拉框已经完毕,欢迎各位博友点评。 .NET下拉框DropDownList层级实现,搜素材,soscw.com .NET下拉框DropDownList层级实现 标签:com   http   blog   style   class   div   img   code   java   javascript   tar    原文地址:http://www.cnblogs.com/yangleikingly/p/King.html
 1 #region 递归添加下拉框的值 参数ParentID为树的最大父结点
 2         public void AddTree(int ParentID, ListItem pNode)
 3         {
 4             //过滤ParentID,得到当前的所有子节点 ParentID为父节点ID
 5             (this.ViewState["DataView_Tree"] as DataTable).DefaultView.RowFilter = "[ParMenuListId] = " + ParentID;
 6 
 7             //循环递归
 8             foreach (DataRowView Row in (this.ViewState["DataView_Tree"] as DataTable).DefaultView)
 9             {
10                 //声明节点
11                 ListItem li = new ListItem();
12                 if (pNode == null)
13                 {
14                     //添加根节点
15                     li.Text = Row["MenuListName"].ToString();
16                     li.Value = Row["MenuListId"].ToString();
17                     ddlParMenu.Items.Add(li);
18                     AddTree(Int32.Parse(Row["MenuListId"].ToString()), li);    //递归
19                 }
20                 else
21                 {
22                     //添加当前节点的子节点
23                     li.Text = "├—" + Row["MenuListName"].ToString();
24                     li.Value = Row["MenuListId"].ToString();
25                     ddlParMenu.Items.Add(li);
26                     AddTree(Int32.Parse(Row["MenuListId"].ToString()), li);     //递归
27                 }
28             }
29         }
30         #endregion

this.ViewState["DataView_Tree"] = DbHelperSQL.Query(@"select MenuListId,ParMenuListId,MenuListName from RY_MenuList").Tables[0];//屏蔽快速通道设置
                AddTree(0, (ListItem)null);
  
我在数据库再加一列之后,加载测试全新2节点下,显示

//声明节点
                ListItem li = new ListItem();
                if (pNode == null)
                {
                    //添加根节点
                    li.Text = Row["MenuListName"].ToString();
                    li.Value = Row["MenuListId"].ToString();
                    ddlParMenu.Items.Add(li);
                    AddTree(Int32.Parse(Row["MenuListId"].ToString()), li);    //递归
                }
                else
                {
                    //添加当前节点的子节点
                    li.Text = "├—" + Row["MenuListName"].ToString();
                    li.Value = Row["MenuListId"].ToString();
                    ddlParMenu.Items.Add(li);
                    AddTree(Int32.Parse(Row["MenuListId"].ToString()), li);     //递归
                }


/// 

DataTable dt = DbHelperSQL.Query("select MenuListId,ParMenuListId,MenuListName from RY_MenuList").Tables[0];
                DataRow[] dr = dt.Select("ParMenuListId=0");
                GetChild(dt, "0", "MenuListId", "MenuListName", dr, ddlParMenu, "—", "—");
此处实现了多层级的表现方式,满足需求,可以无限级,至于前缀可以更改的。
上一篇:JasperReport使用心得
下一篇:CSS3字体图标