通过递归方法 将DataTable中的树状数据信息 按树状格式显示在DropDownList中

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

ContractedBlock.gif ExpandedBlockStart.gif Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#region绑定
privatevoidfn_Bind_DropDownList()
{
DataSetds;

//数据库操作取出相应的ds
//ds=bll_Type.SelectAllTypeForChoose();

this.ddl_Type.Items.Clear();
if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0)
{
DataTabledtPara
=ds.Tables[0];
DataTabledtTree
=newDataTable();
dtTree
=dtPara.Clone();
fn_ChangeToTree(
refdtTree,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,newListItem("","0"));
}
#endregion

#region将类别DataTable信息整理成树状显示
privatevoidfn_ChangeToTree(refDataTabledtTree,DataTabledtPara,intintLevel,stringstrParentTypeID)
{
intLevel
++;
stringstrLeftPre="";//处理每个级别的前缀内容显示
if(intLevel>1)
{
strLeftPre
="|"+strLeftPre.PadLeft(intLevel*2,'-');
}

DataTabledt1
=newDataTable();//当前类别
dt1=dtPara.Clone();
DataTabledt2
=newDataTable();//下一级
dt2=dtPara.Clone();

for(inti=0;i<dtPara.Rows.Count;i++)
{
DataRowdr
=dtPara.Rows[i];
stringstrRowParentTypeID=dr["ParentTypeID"].ToString();
if(strRowParentTypeID==strParentTypeID)
{
dt1.Rows.Add(dr.ItemArray);
}
else
{
dt2.Rows.Add(dr.ItemArray);
}
}

for(intj=0;j<dt1.Rows.Count;j++)
{
DataRowdr
=dt1.Rows[j];

dr[
"TypeName"]=strLeftPre+dr["TypeName"].ToString();
dtTree.Rows.Add(dr.ItemArray);
stringstrRowParentTypeID=dr["TypeID"].ToString();
fn_ChangeToTree(
refdtTree,dt2,intLevel,strRowParentTypeID);//递归
}
}
#endregion
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值