现在从数据库中查询出来这样的数据id name parentID
1 a 0
2 b 0
3 c 0
4 d 1
5 e 4
6 f 2
7 g 1注:这里parentID对应着ID,这里还是多级关系。现在想重装成这样的数据:id name parentID levelid
1 a 0 0
4 d 1 1
5 e 4 2
7 g 1 1
2 b 0 0
6 f 2 1
3 c 0 0
注:这里加了一列levelid,这列就是说明几层上级
另外,它的下级要直接排在它的下面。
各位帮忙看看。这是一个递归调用的问题,最主要的还是有个级别在那里不好处理。
1 a 0
2 b 0
3 c 0
4 d 1
5 e 4
6 f 2
7 g 1注:这里parentID对应着ID,这里还是多级关系。现在想重装成这样的数据:id name parentID levelid
1 a 0 0
4 d 1 1
5 e 4 2
7 g 1 1
2 b 0 0
6 f 2 1
3 c 0 0
注:这里加了一列levelid,这列就是说明几层上级
另外,它的下级要直接排在它的下面。
各位帮忙看看。这是一个递归调用的问题,最主要的还是有个级别在那里不好处理。
解决方案 »
- siteserver 与ASP.NET的结合问题
- 求助
- 怎样将已写入dataset中table的某个列的不重复值,作为依据,再次到数据库进行查询?
- 根据IP自动转向的数据库~?
- 走过路过不要错过,求助JS!!!
- 关于ASP.NET中的验证码
- 在将 nvarchar 值 '' 转换成数据类型 bit 时失败
- DataGrid数据绑定问题?
- Asp.net(C#)中的對象Response等怎麼沒了﹖急﹐馬上給分﹗
- 我想运行ASPX,要安装哪个版本的IIS,在哪里可以下载?
- |M| 第二贴:刚才的不行 我们都知道DataGrid,GridView都有DataKey属性用来存储关键字,现在我用Repeater用什么来做主键
- gridview刷新的问题
如果在程序中实现.首先查询这张表.
排序按parentid,id排. 这样保存所有高级对象在前面,在后面处理时要先处理.然后循环datatable.对于每条记录,找它的parentid对应的记录如果有,取levelid +1更新到自己
如果没有为 0不用递归。
1 a 0
2 b 0
3 c 0
4 d 1
5 e 4
6 f 2
7 g 1这种形式了,数据重组只能在SQL和程序中进行处理了。 重组后的levelid列是后来加上去的。
dt.Columns.Add("id",typeof(int));
dt.Columns.Add("name");
dt.Columns.Add("parentID",typeof(int));
dt.Columns.Add("level",typeof(int)); int[] ary = new int[]{0,0,0,1,4,2,1};
for(int i=0;i<6;i++)
{
DataRow row = dt.NewRow();
row["id"]= i+1;
row["Name"] = (char)('a'+i);
row["parentID"] = ary[i];
dt.Rows.Add(row); }
System.Web.UI.WebControls.DataGrid g = new System.Web.UI.WebControls.DataGrid();
g.DataSource = dt.DefaultView;
g.DataBind(); this.Panel1.Controls.Add(g); for( int i=0;i<dt.Rows.Count;i++)
{
DataRow[] rows = dt.Select("id=" + dt.Rows[i]["ParentId"].ToString());
if (rows.Length > 0)
{
dt.Rows[i]["level"] = (int)rows[0]["level"] + 1;
}
else
{
dt.Rows[i]["level"] = 0;
}
}
g = new System.Web.UI.WebControls.DataGrid();
g.DataSource = dt.DefaultView;
g.DataBind();
this.Panel1.Controls.Add(g);