上网查了许多展示treeview的例子,但数据库记录结构基本都是一样的:
ID,Value,PID
这种结构实现起来是很简单。
但小弟今天要给用友U870做一个外挂,却发现它的数据库记录结构跟上面是不一样的,请看下面数据库的一部分:
ID, Name, Grade, End
00 电子类 1 0
0001 电阻 2 0
000101 贴片电阻 3 1
000102 薄膜电阻 3 0
00010201 薄膜电阻(ROHS物料) 4 1
00010202 薄膜电阻(非ROHS物料) 4 1
000103 敏感电阻 3 1
000104 排阻系列 3 0
00010401 排阻(ROHS物料) 4 1
00010402 排阻(非ROHS物料) 4 1
000105 其它电阻 3 1
0002 电位器 2 0
000201 可调/旋转电位器(ROHS物料) 3 1
……
其中Grade表示层,End表示“是否叶结点”,各记录在树中的位置按从上到下顺序排列。如上表对应的树应该是: |(00)电子类
|
|——(0001)电阻
| |
| |——(000101)贴片电阻
| |
| |——(000102)薄膜电阻
| | |——(00010201)薄膜电阻(ROHS物料)
| | |——(00010202)薄膜电阻(非ROHS物料)
| |
| |——(000103)敏感电阻
| |
| |——(000104)排阻系列
| | |——(00010401)排阻(ROHS物料)
| | |——(00010402)排阻(非ROHS物料)
| |
| |——(000105)其它电阻
|
|——(0002)电位器
| |——(000201)可调/旋转电位器(ROHS物料)……虽然知道规则,但还是想不出一个好的算法,让这些数据填入treeview中,请高手指点。
ID,Value,PID
这种结构实现起来是很简单。
但小弟今天要给用友U870做一个外挂,却发现它的数据库记录结构跟上面是不一样的,请看下面数据库的一部分:
ID, Name, Grade, End
00 电子类 1 0
0001 电阻 2 0
000101 贴片电阻 3 1
000102 薄膜电阻 3 0
00010201 薄膜电阻(ROHS物料) 4 1
00010202 薄膜电阻(非ROHS物料) 4 1
000103 敏感电阻 3 1
000104 排阻系列 3 0
00010401 排阻(ROHS物料) 4 1
00010402 排阻(非ROHS物料) 4 1
000105 其它电阻 3 1
0002 电位器 2 0
000201 可调/旋转电位器(ROHS物料) 3 1
……
其中Grade表示层,End表示“是否叶结点”,各记录在树中的位置按从上到下顺序排列。如上表对应的树应该是: |(00)电子类
|
|——(0001)电阻
| |
| |——(000101)贴片电阻
| |
| |——(000102)薄膜电阻
| | |——(00010201)薄膜电阻(ROHS物料)
| | |——(00010202)薄膜电阻(非ROHS物料)
| |
| |——(000103)敏感电阻
| |
| |——(000104)排阻系列
| | |——(00010401)排阻(ROHS物料)
| | |——(00010402)排阻(非ROHS物料)
| |
| |——(000105)其它电阻
|
|——(0002)电位器
| |——(000201)可调/旋转电位器(ROHS物料)……虽然知道规则,但还是想不出一个好的算法,让这些数据填入treeview中,请高手指点。
{
string sqlstr = "select ID, Name,Grade, /*End*/ from CTable order by ID asc";
System.Data.DataSet dst = new DataSet();
dst = GetDataset(sqlstr);//根据提供的sql查询语句取得DataSet数据
string strid, strname;
int grade;
TreeNode[] tn = new TreeNode[gradecount];
for (int i = 1; i < gradecount; i++) { tn[i] = new TreeNode(); }
tn[0] = new TreeNode("分类", "-1");
for (int i = 0; i < dst.Tables[0].Rows.Count; i++)
{
strname = dst.Tables[0].Rows[i]["name"].ToString();
strid= dst.Tables[0].Rows[i]["id"].ToString();
grade = int.Parse (dst.Tables[0].Rows[i]["grade"].ToString());
if (grade > 0)
{
tn[grade] = new TreeNode(strname, strid);
tn[grade - 1].ChildNodes.Add(tn[grade]);
//层次“低”的子树加入到层次“高”的子树
}
}
return tn[0];
}