数据层级展示
来源:互联网 发布:淘宝太坑 缩水扣不了 编辑:程序博客网 时间:2024/05/18 18:18
今天遇到一个问题,就是要把一个有层级关系的数据表的数据用层级的方式展示出来(不是用TreeView),而是在下拉框中展示出来,真的很BT的需求,但是还是要实现的是不,不说废话了,下面就是具体做法
//1.在现有的数据中加一个表示这条数据深度(第几层)的列
在这里,dt是已经充满数据的一个DataTable
//克隆一个表,加上Depth(深度列)
DataTable clondt = dt.Copy();
clondt.Columns.Add("Depth");
MakeTree(dt, clondt);//填充一条数据的深度值
DataTable newdt = clondt.Clone();
SetNewTable(newdt, clondt);//真正的填充层级数据
//2.取得这个深度值,代码如下:
/// <summary>
/// 填充节点层级
/// </summary>
/// <param name="dt"></param>
/// <param name="clondt"></param>
private static void MakeTree(DataTable dt, DataTable clondt)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
int depth = 1;
if (dt.Rows[i]["PARENTCOMPANYID"] != DBNull.Value)
{
depth++;
int parentcompanyId = Convert.ToInt32(dt.Rows[i]["PARENTCOMPANYID"]);
while (HaveLoopParent(dt, ref parentcompanyId))
{
depth++;
}
}
clondt.Rows[i]["Depth"] = depth;
}
}
private static bool HaveLoopParent(DataTable dt, ref int parentcompanyId)
{
DataRow[] drs = dt.Select("COMPANYID=" + parentcompanyId);
if (drs.Length > 0)
{
if (drs[0]["PARENTCOMPANYID"] == DBNull.Value)
return false;
else
{
parentcompanyId = Convert.ToInt32(drs[0]["PARENTCOMPANYID"]);
return true;
}
}
else
return false;
}
//3.填充层级数据
/// <summary>
/// 把层级关系赋值给新的表
/// </summary>
/// <param name="newdt"></param>
/// <param name="clondt"></param>
private static void SetNewTable(DataTable newdt, DataTable clondt)
{
DataRow rootRow = clondt.Select("PARENTCOMPANYID IS NULL")[0];
SetNewRow(newdt, rootRow);
GetChild(rootRow, clondt, newdt);
}
private static void SetNewRow(DataTable newdt, DataRow rootRow)
{
DataRow row = newdt.NewRow();
if (rootRow["Depth"] != DBNull.Value)
{
string line = "";
for (int i = 0; i < Convert.ToInt32(rootRow["Depth"]); i++)
{
line += "| ";
}
row["COMPANYNAME"] = line + "-" + rootRow["COMPANYNAME"];
}
row["COMPANYID"] = rootRow["COMPANYID"];
row["COMPANYNO"] = rootRow["COMPANYNO"];
row["COMPANYCODE"] = rootRow["COMPANYCODE"];
row["RECORDSTATUS"] = rootRow["RECORDSTATUS"];
row["MODIFYUSERID"] = rootRow["MODIFYUSERID"];
row["MODIFYDATE"] = rootRow["MODIFYDATE"];
row["PARENTCOMPANYNO"] = rootRow["PARENTCOMPANYNO"];
row["CreateDate"] = rootRow["CreateDate"];
row["ModifiedOn"] = rootRow["ModifiedOn"];
row["PARENTCOMPANYID"] = rootRow["PARENTCOMPANYID"];
row["Depth"] = rootRow["Depth"];
newdt.Rows.Add(row);
}
private static void GetChild(DataRow rootRow, DataTable clondt, DataTable newdt)
{
DataRow[] childrows = clondt.Select("PARENTCOMPANYID=" + rootRow["COMPANYID"]);
for (int i = 0; i < childrows.Length; i++)
{
DataRow childrow = childrows[i];
SetNewRow(newdt, childrow);
if (clondt.Select("PARENTCOMPANYID=" + childrow["COMPANYID"]).Length > 0)
{
GetChild(childrow, clondt, newdt);
}
}
}
- 数据层级展示
- 层级关系的数据展示
- ASP递归层级表格数据展示
- sql层级数据查询
- 数据展示
- 数据分析师的层级
- 逐级解构层级关系数据
- ifream 中的控件 和其他组件的层级关系展示
- SQL Server 递归查询带层级缩进展示
- [数据库]数据库存储层级结构数据
- 巧用excel创建层级参数化数据
- 散列函数与层级结构数据
- 层级数据模板 案例(HierarchicalDataTemplateWindow)
- JPivot入门 展示数据
- 使用Displaytag展示数据
- 树形数据层次展示
- UITableView 数据展示
- UITableView 数据展示 cell
- Love or Money?---Chapter 4
- 异常
- Visual Basic 2008 MsgBox函数内部常量(26种)——汇总
- 多线程编程
- VC“cannot execute program”错误的解决方法
- 数据层级展示
- 输出叠加梯形
- Python装饰器与面向切面编程
- 软件需求分析规格说明书格式
- NGUI v2.0 Interaction_7:UIButtonRotation UI按钮旋转类
- Asp.net设置默认按钮的方法总结
- 如何把word里的分页符、换行符替换成回车符?
- NGUI v2.0 Interaction_8_9:UIButtonScale UI按钮缩放类 || UIButtonSound UI按钮声音类
- 输出叠直角三角形