利用ListControl控件来绑定分层次的数据
来源:互联网 发布:淘宝身份认证 编辑:程序博客网 时间:2024/05/29 11:37
今天看到了一个帖子,想实现以下效果的下拉菜单
显示文本 对应的values值
├一级目录1 1
├二级目录1 4
├二级目录2 5
├二级目录3 6
├一级目录2 2
├二级目录4 7
├一级目录3 3
表结构符合以下约束:
id name parentid
1 一级目录1 0
2 一级目录2 0
3 一级目录3 0
4 二级目录1 1
5 二级目录2 1
6 二级目录3 1
7 二级目录4 2
那么根据实现的目的,做以下判断
1、应该支持无限级的深度
2、对所有符合此条件和显示需求的ListControl都要适合
3、适应各种不同数据格式的起始点(根节点)的逻辑条件 注:有的是0 有的是"" 有的是null等等。
所以归纳了3个方法,如下:
/// <summary>
/// 用户构造具有递归层次的List控件
/// </summary>
/// <param name="listControl">要绑定数据的List控件 </param>
/// <param name="tblData">数据源 必须具备递归条件 </param>
/// <param name="strTextField">文本字段 </param>
/// <param name="strValueField">值字段 </param>
/// <param name="strPIDField">递归的父数据字段 </param>
/// <param name="strChildField">递归的子数据字段 </param>
/// <param name="strStartStatment">递归条件 </param>
public void BuildTreeList(ListControl listControl,
DataTable tblData,
string strTextField,
string strValueField,
string strPIDField,
string strChildField,
string strStartStatment)
{
foreach (DataRow dr in tblData.Select(strStartStatment))
{
//先添加本项,然后添加子项
ListItem liParent = new ListItem();
liParent.Text = GetHeaderTextInListControlItemText(0) + dr[strTextField].ToString();
liParent.Value = dr[strValueField].ToString();
listControl.Items.Add(liParent);
BuildListItem(listControl, dr, 0, tblData, strTextField, strValueField, strPIDField, strChildField);
}
}
/// <summary>
/// 递归添加子项
/// </summary>
/// <param name="listControl">List控件 </param>
/// <param name="dr">一行 </param>
/// <param name="iDepth">深度,用户控制前面显示的空格 </param>
/// <param name="tblData">数据表格 </param>
/// <param name="strTextField">文本字段 </param>
/// <param name="strValueField">值字段 </param>
/// <param name="strPIDField">父字段 </param>
/// <param name="strChildField">子字段 </param>
private void BuildListItem(ListControl listControl,
DataRow dr,
int iDepth,
DataTable tblData,
string strTextField,
string strValueField,
string strPIDField,
string strChildField)
{
int iTempDepth = iDepth;
iTempDepth++;
string strFindChildRowStatment = strPIDField + "='" + dr[strChildField].ToString().Trim() + "'";
DataRow[] drc = tblData.Select(strFindChildRowStatment);
foreach (DataRow drChild in drc)
{
ListItem li = new ListItem();
li.Value = drChild[strValueField].ToString();
li.Text = GetHeaderTextInListControlItemText(iTempDepth) + drChild[strTextField].ToString();
listControl.Items.Add(li);
strFindChildRowStatment = strPIDField + "='" + drChild[strChildField].ToString() + "'";
BuildListItem(listControl, drChild, iTempDepth, tblData, strTextField, strValueField, strPIDField, strChildField);
}
}
/// <summary>
/// 通过深度来 确定显示文字的格式
/// </summary>
/// <param name="iDepth"> </param>
/// <returns> </returns>
protected string GetHeaderTextInListControlItemText(int iDepth)
{
string strHeaderText = "";
for (int i = 0; i < iDepth; i++)
{
strHeaderText += Server.HtmlDecode(" ");
}
if (iDepth != -1)
{
strHeaderText += " ¦-";
}
return strHeaderText;
}
在调用的时候,非常简单,如下:
DataTable dt = //获得你那个表;
BuildTreeList(yourControlName,dt,TextFiled,ValueFiled,IDFiled,PIDFiled," where PID ='0'");
呵呵具体的自己要根据参数整理……
- 利用ListControl控件来绑定分层次的数据
- 利用ListControl控件浏览数据
- ListControl控件的使用
- ListControl控件的使用
- ListControl控件的使用方法
- ListControl控件的使用方法
- ListControl 控件的使用方法
- WPF TreeView 的数据绑定(分层)
- 利用CommandArgument 属性获取 datalist的中 控件数据绑定
- MFC ListControl控件的操作
- VC控件ListControl的使用
- MVC 绑定DropDownList 分层次显示
- wpf ComboBox 控件利用DataSet数据绑定
- vc++中利用ado和listcontrol控件进行数据库应用开发的一点总结
- C++控件:ListControl列表控件的使用方法
- 反射-利用泛型把枚举绑定到listControl
- DropDownList控件的数据绑定
- ComboBox控件的数据绑定
- EnumWindows
- 软件设计师(高级程序员)考试大纲
- 数组名 和 数组名取地址 的不同
- Ajax made simple
- CronTab命令介绍
- 利用ListControl控件来绑定分层次的数据
- freebsd扫盲之mysql安装、启动、重启和设置
- Open Scene Graph
- Hibernate3 相关操作
- Comparator 将 M×N 转化成 M+N
- flex使用有感
- 为什么美女喜欢软件开发的gg做老公.
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
- 开启rewrite功能及检测示例