最近在做一个小型商城项目,要用到无限分类,也有人称之为无极分类,客户要求在Gridview下程树状显示,偶是菜鸟,花了半天的时间才搞定:)
List做的Gridview数据源,附上最终效果图:

主要参考了网上dropdownlist绑定无限分类列表的例子,该例子的代码如下:

Dropdownlist无限分类示例代码
1
/**//// <summary>
2
/// 创建分级下拉框
3
/// </summary>
4
public static void CreateLevelDropDown(ListControl ddlst, DataTable dt,string space,string flag)
5
{
6
var allItems = new ArrayList();
7
var rows = dt.Select("[FatherID]=" + 0);
8
if (string.Empty == space) space = "├ ";
9
foreach (DataRow row in rows)
10
CreateLevelDropDownAssistant(dt, ref allItems, row, space,flag);
11
var items = new ListItem[allItems.Count];
12
allItems.CopyTo(items);
13
ddlst.Items.AddRange(items);
14
}
15
//重载
16
public static void CreateLevelDropDown(ListControl ddlst, DataTable dt)
17
{
18
CreateLevelDropDown(ddlst, dt, "", "");
19
}
20
public static void CreateLevelDropDownAssistant(DataTable dt, ref ArrayList items, DataRow parentRow, string curHeader,string flag)
21
{
22
var tmpcurHeader = curHeader;
23
if((int)parentRow["Layer"]>0)
24
{
25
for(int i=0;i<(int)parentRow["Layer"];i++)
26
{
27
curHeader = " "+curHeader;
28
}
29
}
30
var tmpflag = flag;
31
if(flag.Length!=0)
32
{
33
if (!(bool)parentRow["NeedBuild"]) flag = "";
34
}
35
var newItem = new ListItem(curHeader + parentRow["strName"]+flag, parentRow["id"].ToString());
36
items.Add(newItem);
37
parentRow.Delete();
38
var rows = dt.Select("[FatherID]='" + newItem.Value + "'");
39
if (string.Empty == tmpcurHeader) tmpcurHeader = "├ ";
40
for (int i = 0; i < rows.Length - 1; i++)
41
CreateLevelDropDownAssistant(dt, ref items, rows[i], tmpcurHeader, tmpflag);
42
if (rows.Length > 0)
43
CreateLevelDropDownAssistant(dt, ref items, rows[rows.Length - 1], tmpcurHeader, tmpflag);
44
}
也不知道效率怎么样,望高手能给指点一下,欢迎大家拍砖:)