DataSet递归构建树结构
2017-10-27 15:35:58 访问(2197) 赞(0) 踩(0)
通过DataSet创建树结构的DataTable
/// <summary>
/// 通过DataSet创建树结构的DataTable
/// </summary>
/// <param name="ds">数据集</param>
/// <param name="pId">父节点|如:"0"代表根节点</param>
/// <param name="idFieldName">关键字字段名|如:"ID"</param>
/// <param name="pidFieldName">父节点字段名|如:"PID"</param>
/// <returns>树结构的DataTable,p__Layer新增字段为层数</returns>
public DataTable DataTableTreeCreate(DataSet ds, string pId, string idFieldName, string pidFieldName)
{
ds.Tables[0].Columns.Add(BmName.p__Layer, typeof(int));
DataTable theResult = ds.Tables[0].Clone();
DataTableTreeBuild(theResult, ds, pId, idFieldName, pidFieldName, 1);
return theResult;
}
/// <summary>
/// 通过DataSet组合构建树结构的DataTable
/// </summary>
/// <param name="theResult">要构建的数据表</param>
/// <param name="ds">数据集</param>
/// <param name="pId">父节点|如:"0"代表根节点</param>
/// <param name="idFieldName">关键字字段名|如:"ID"</param>
/// <param name="pidFieldName">父节点字段名|如:"PID"</param>
/// <param name="iLayer">当前层数,从1开始|如:1</param>
protected void DataTableTreeBuild(DataTable theResult, DataSet ds, string pId, string idFieldName, string pidFieldName,int iLayer)
{
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
if (dr[pidFieldName].ToString() != pId)
continue;
dr[BmName.p__Layer] = iLayer;
theResult.ImportRow(dr);
DataTableTreeBuild(theResult, ds, dr[idFieldName].ToString(), idFieldName, pidFieldName, iLayer + 1);
}
}
BmName
using System;
using System.Collections.Generic;
using System.Text;
namespace eKing.BmLib.Names
{
/// <summary>
///
/// </summary>
public class BmName
{
/// <summary>
///
/// </summary>
public BmName()
{
}
/// <summary>
/// p__Layer
/// </summary>
public const string p__Layer = "p__Layer";
}
}
上一条:
下一条:
相关评论
发表评论