通过递归方法 将DataTable中的树状数据信息 按树状格式显示在DropDownList中
2009-07-08 17:03
609 查看
DataTable中的数据:
TypeID , TypeName , ParentTypeID
1 类别A 0
2 类别B 0
3 子类别B1 2
4 子类别A1 1
5 孙类别A11 4
DropDownList的显示效果:
类别A
|--子类别A1
|----孙类别A11
类别B
|--子类别B1
Code
#region 绑定
private void fn_Bind_DropDownList()
{
DataSet ds;
//数据库操作 取出相应的ds
//ds = bll_Type.SelectAllTypeForChoose();
this.ddl_Type.Items.Clear();
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
DataTable dtPara = ds.Tables[0];
DataTable dtTree = new DataTable();
dtTree = dtPara.Clone();
fn_ChangeToTree(ref dtTree, dtPara, 0, "0");//从顶级开始递归遍历
this.ddl_Type.DataSource = dtTree;
this.ddl_Type.DataTextField = dtTree.Columns[1].ToString();
this.ddl_Type.DataValueField = dtTree.Columns[0].ToString();
this.ddl_Type.DataBind();
}
this.ddl_Type.Items.Insert(0, new ListItem("", "0"));
}
#endregion
#region 将类别DataTable信息 整理成树状显示
private void fn_ChangeToTree(ref DataTable dtTree ,DataTable dtPara,int intLevel,string strParentTypeID)
{
intLevel++;
string strLeftPre = "";//处理每个级别的前缀内容显示
if(intLevel>1)
{
strLeftPre ="|" + strLeftPre.PadLeft(intLevel*2,'-');
}
DataTable dt1 = new DataTable();//当前类别
dt1 = dtPara.Clone();
DataTable dt2 = new DataTable();//下一级
dt2 = dtPara.Clone();
for (int i = 0; i < dtPara.Rows.Count; i++)
{
DataRow dr = dtPara.Rows[i];
string strRowParentTypeID = dr["ParentTypeID"].ToString();
if (strRowParentTypeID == strParentTypeID)
{
dt1.Rows.Add(dr.ItemArray);
}
else
{
dt2.Rows.Add(dr.ItemArray);
}
}
for (int j = 0; j < dt1.Rows.Count; j++)
{
DataRow dr = dt1.Rows[j];
dr["TypeName"] = strLeftPre + dr["TypeName"].ToString();
dtTree.Rows.Add(dr.ItemArray);
string strRowParentTypeID = dr["TypeID"].ToString();
fn_ChangeToTree(ref dtTree, dt2, intLevel, strRowParentTypeID);//递归
}
}
#endregion
TypeID , TypeName , ParentTypeID
1 类别A 0
2 类别B 0
3 子类别B1 2
4 子类别A1 1
5 孙类别A11 4
DropDownList的显示效果:
类别A
|--子类别A1
|----孙类别A11
类别B
|--子类别B1
Code
#region 绑定
private void fn_Bind_DropDownList()
{
DataSet ds;
//数据库操作 取出相应的ds
//ds = bll_Type.SelectAllTypeForChoose();
this.ddl_Type.Items.Clear();
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
DataTable dtPara = ds.Tables[0];
DataTable dtTree = new DataTable();
dtTree = dtPara.Clone();
fn_ChangeToTree(ref dtTree, dtPara, 0, "0");//从顶级开始递归遍历
this.ddl_Type.DataSource = dtTree;
this.ddl_Type.DataTextField = dtTree.Columns[1].ToString();
this.ddl_Type.DataValueField = dtTree.Columns[0].ToString();
this.ddl_Type.DataBind();
}
this.ddl_Type.Items.Insert(0, new ListItem("", "0"));
}
#endregion
#region 将类别DataTable信息 整理成树状显示
private void fn_ChangeToTree(ref DataTable dtTree ,DataTable dtPara,int intLevel,string strParentTypeID)
{
intLevel++;
string strLeftPre = "";//处理每个级别的前缀内容显示
if(intLevel>1)
{
strLeftPre ="|" + strLeftPre.PadLeft(intLevel*2,'-');
}
DataTable dt1 = new DataTable();//当前类别
dt1 = dtPara.Clone();
DataTable dt2 = new DataTable();//下一级
dt2 = dtPara.Clone();
for (int i = 0; i < dtPara.Rows.Count; i++)
{
DataRow dr = dtPara.Rows[i];
string strRowParentTypeID = dr["ParentTypeID"].ToString();
if (strRowParentTypeID == strParentTypeID)
{
dt1.Rows.Add(dr.ItemArray);
}
else
{
dt2.Rows.Add(dr.ItemArray);
}
}
for (int j = 0; j < dt1.Rows.Count; j++)
{
DataRow dr = dt1.Rows[j];
dr["TypeName"] = strLeftPre + dr["TypeName"].ToString();
dtTree.Rows.Add(dr.ItemArray);
string strRowParentTypeID = dr["TypeID"].ToString();
fn_ChangeToTree(ref dtTree, dt2, intLevel, strRowParentTypeID);//递归
}
}
#endregion
相关文章推荐
- 通过递归方法 将DataTable中的树状数据信息 按树状格式显示在DropDownList中
- 通过python直接显示json格式数据的方法
- 通过python直接显示json格式数据的方法
- jquery里面调用getjson方法,将list类型转换为json格式数据,在页面迭代显示
- DropDownList与DataTable数据绑定的方法
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- U-boot中通过ENV设置显示设备(如LCD)参数的方法与格式
- android通过Location API显示地址信息的实现方法
- 通过 Google Map 显示地图和乘车信息的方法
- 用递归的方法树形显示数据
- 一种将数据表DataTable转为JSON格式的新方法
- 在sqlplus中通过数据字典按条件查询信息(针对oracle),显示未选定行
- jsp通过自定义标签库实现数据列表显示的方法
- DropDownList中显示树状数据
- 用递归在Dropdownlist中显示树状结构(连数据库)
- 如何通过DropDownList在GridView显示数据
- [原] 一种将数据表DataTable转为JSON格式的新方法
- SQL SERVER 中递归 层次显示数据信息
- 通过查询数据库中的数据匹配在页面上:(set单条数据属性是在页面上的显示与foreach的不同) 通过ID修改提取位置表信息
- Asp.Net--DropDownList与DataTable数据绑定的方法(C#)[学习笔记]