转:打造DropDownList,TreeView,ListBox无限极分类目录树
[csharp] view plaincopyprint?
#region DropDownList无限递归显示层次关系
/// <summary>
/// 创建无限分级下拉列表框
/// </summary>
/// <param name="ddlst">下拉控件</param>
/// <param name="dt">源DataTable</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
public static void CreateLevelDropDown(DropDownList ddlst, DataTable dt, string text, string value, string parentid)
{
ArrayList allItems = new ArrayList();
DataRow[] rows = dt.Select(parentid + "=0");
foreach (DataRow row in rows)
CreateLevelDropDownAssistant(dt, ref allItems, row, string.Empty, text, value, parentid);
ListItem[] items = new ListItem[allItems.Count];
allItems.CopyTo(items);
ddlst.Items.AddRange(items);
} /// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dt">源DataTable</param>
/// <param name="items">数组</param>
/// <param name="parentRow">当前节点</param>
/// <param name="curHeader">前缀</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
private static void CreateLevelDropDownAssistant(DataTable dt, ref ArrayList items, DataRow parentRow, string curHeader, string text, string value, string parentid)
{
ListItem newItem = new ListItem(curHeader + Until.CutString(parentRow[text].ToString(), , true), parentRow[value].ToString());
items.Add(newItem);
DataRow[] rows = dt.Select(parentid + "=" + newItem.Value);
for (int i = ; i < rows.Length - ; i++)
CreateLevelDropDownAssistant(dt, ref items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣", text, value, parentid); if (rows.Length > )
CreateLevelDropDownAssistant(dt, ref items, rows[rows.Length - ], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗", text, value, parentid);
} #endregion #region TreeView 无限递归显示层次关系目录树
/// <summary>
/// 创建无限分级目录树TreeView
/// </summary>
/// <param name="treeview">TreeView空间</param>
/// <param name="dt">数据源DataTable</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
public static void CreateLevelTreeView(TreeView treeview, DataTable dt, string text, string value, string parentid)
{
DataView dv = dt.DefaultView;
dv.RowFilter = parentid + "=0";
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[text].ToString();
node.Value = drv[value].ToString();
node.Expanded = false;
treeview.Nodes.Add(node);
CreatTreeViewChildNode(dv, node, text, value, parentid);
}
} /// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dv">源DataView</param>
/// <param name="parentNode">当前节点</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
private static void CreatTreeViewChildNode(DataView dv, TreeNode parentNode, string text, string value, string parentid)
{
dv.RowFilter = parentid + "=" + parentNode.Value;
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[text].ToString();
replyNode.Value = row[value].ToString();
replyNode.Expanded = false;
parentNode.ChildNodes.Add(replyNode);
CreatTreeViewChildNode(dv, replyNode, text, value, parentid);
}
} /// <summary>
/// 创建无限分级目录树TreeView
/// </summary>
/// <param name="treeview">TreeView空间</param>
/// <param name="dt">数据源DataTable</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="url">url字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
public static void CreateLevelTreeView(TreeView treeview, DataTable dt, string text, string value, string url, string parentid)
{
DataView dv = dt.DefaultView;
dv.RowFilter = parentid + "=0";
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[text].ToString();
node.Value = drv[value].ToString();
node.NavigateUrl = drv[url].ToString();
node.Expanded = false;
treeview.Nodes.Add(node);
CreatTreeViewChildNode(dv, node, text, value, url, parentid);
}
} /// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dv">源DataView</param>
/// <param name="parentNode">当前节点</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="url">url字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
private static void CreatTreeViewChildNode(DataView dv, TreeNode parentNode, string text, string value, string url, string parentid)
{
dv.RowFilter = parentid + "=" + parentNode.Value;
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[text].ToString();
replyNode.Value = row[value].ToString();
replyNode.NavigateUrl = row[url].ToString();
replyNode.Expanded = false;
parentNode.ChildNodes.Add(replyNode);
CreatTreeViewChildNode(dv, replyNode, text, value, url, parentid);
}
}
#endregion #region 创建无限分级ListBox
/// <summary>
/// 创建无限分级ListBox
/// </summary>
/// <param name="ddlst">ListBox控件</param>
/// <param name="dt">源DataTable</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
public static void CreateLevelListBox(ListBox ddlst, DataTable dt, string text, string value, string parentid)
{
ArrayList allItems = new ArrayList();
DataRow[] rows = dt.Select(parentid + "=0");
foreach (DataRow row in rows)
CreateLevelListBoxAssistant(dt, ref allItems, row, string.Empty, text, value, parentid);
ListItem[] items = new ListItem[allItems.Count];
allItems.CopyTo(items);
ddlst.Items.AddRange(items);
} /// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dt">源DataTable</param>
/// <param name="items">数组</param>
/// <param name="parentRow">当前节点</param>
/// <param name="curHeader">前缀</param>
/// <param name="text">text字段</param>
/// <param name="value">value字段</param>
/// <param name="parentid">深度字段 例如parentid</param>
private static void CreateLevelListBoxAssistant(DataTable dt, ref ArrayList items, DataRow parentRow, string curHeader, string text, string value, string parentid)
{
ListItem newItem = new ListItem(curHeader + Until.CutString(parentRow[text].ToString(), , true), parentRow[value].ToString());
items.Add(newItem);
DataRow[] rows = dt.Select(parentid + "=" + newItem.Value);
for (int i = ; i < rows.Length - ; i++)
CreateLevelListBoxAssistant(dt, ref items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣", text, value, parentid); if (rows.Length > )
CreateLevelListBoxAssistant(dt, ref items, rows[rows.Length - ], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗", text, value, parentid);
}
#endregion
原文地址:http://blog.csdn.net/smartsmile2012/article/details/7998590
转:打造DropDownList,TreeView,ListBox无限极分类目录树的更多相关文章
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- 自定义TREEVIEW UL无限极嵌套
背景:做一个多级图片分类管理,当然要用到TreeView,在asp.net中已经提供了此服务器控件,参照效果,自定义一个简单可控性高的就当做练手吧! 效果:如图,小图标 折叠 展开 ico-tr ...
- WPF—TreeView无限极绑定集合形成树结构
1.如图所示:绑定树效果图 2.前台Xaml代码: <Window x:Class="WpfTest.MainWindow" xmlns="http://schem ...
- [No0000D1]WPF—TreeView无限极绑定集合形成树结构
1.如图所示:绑定树效果图 2.前台Xaml代码: <Window x:Class="WpfTest.MainWindow" xmlns="http://schem ...
- yii框架无限极分类的做法
用yii框架做了一个无限极分类,主要的数组转换都是粘贴的别人的代码,但还是不要脸的写出来,方便以后自己看 用的是递归,不是path路径 控制器: protected function subtree( ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- PHP无限极分类
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...
随机推荐
- Nginx + PHP 缓存详解
Nginx缓存nginx有两种缓存机制:fastcgi_cache和proxy_cache下面我们来说说这两种缓存机制的区别吧proxy_cache作用是缓存后端服务器的内容,可能是任何内容,包括静态 ...
- Request、Request.Form和Request.QueryString的区别
Request.Form:获取以POST方式提交的数据(接收Form提交来的数据): Request.QueryString:获取地址栏参数(以GET方式提交的数据) Request:包含以上两种方式 ...
- maven 的各种命令
mvn clean : 清理旧的文件 mvn clean compile : 清理 .编译 mvn clean test : 清理 .编译 .测试 mvn clean package : ...
- 10个专属于移动app开发者的最佳移动JavaScript框架
1.Titanium Mobile JavaScript Frameworks Titanium Mobile JavaScript框架是移动应用开发者(Android & iOS)首选的最优 ...
- 什么是USBMini接口
USB的接口有四种.一种是大头,有A型和B型两种,其中A型最常见,就是我们用的最多的标准的USB接头:一种是小头的,也就是USB Mini,也有A型和B型两种,其中B型应用最多,主要应用于手机.MP4 ...
- linux性能问题(CPU,内存,磁盘I/O,网络)
一. CPU性能评估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本信息,可选参数 -n : 在周期性循环输出时,头部信息仅显示一次 delay : 两次输 ...
- C#下内存管理--垃圾收集
章节安排 内存管理简介 垃圾回收机制 性能问题 C#下非托管资源的处理 要强调的几点 References 内存管理简介 对于任何一种编程语言,内存管理都是不得不提很重要的一块内容,但可惜的是目前为止 ...
- 在线教育服务:http://www.ablesky.com/
在线教育服务:http://www.ablesky.com/
- Django 使用原生SQL
def dictfetchall(cursor): "将游标返回的结果保存到一个字典对象中" desc = cursor.description return [ dict(zip ...
- myGeneration代码生成器
转自:http://www.cnblogs.com/leitwolf/archive/2007/07/27/833255.html http://blog.csdn.net/happyhippy/ar ...