请教一个简单的递归问题

tank_2009 2010-04-06 09:44:14
有一张表,内容如下

父, 子, 其他
aa, 电视机, ....
aa, 洗衣机, ....
bb, 脸盆 , ....
bb, 茶杯 , ....


请如, 怎样根据以上数据,构造一个2级的TreeView?谢谢
...全文
124 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzsh0622 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tank_2009 的回复:]
引用 5 楼 lzsh0622 的回复:
C# code
private void button1_Click(object sender, EventArgs e)
{
// 父, 子, 其他
// aa, 电视机, ....
// aa, 洗衣机, ....
// bb, 脸盆 , ....
// bb, 茶杯 , ....

DataTable dt = new Da…………
[/Quote]
什么叫“好像上全死循环”?你测试过?

我已测试通过,是递归。

项目中,数据一般都存数据库,动态管理。

三个列

id name pid
1 aa 0
2 bb 0
3 电视机 1
4 洗衣机 1
5 脸盆 2
6 茶杯 2
yanchenyu 2010-04-06
  • 打赏
  • 举报
回复
学习学习。
tank_2009 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lzsh0622 的回复:]
C# code
private void button1_Click(object sender, EventArgs e)
{
// 父, 子, 其他
// aa, 电视机, ....
// aa, 洗衣机, ....
// bb, 脸盆 , ....
// bb, 茶杯 , ....

DataTable dt = new Da……
[/Quote]

好像上全死循环.
liuyileneal 2010-04-06
  • 打赏
  • 举报
回复
上边的arrayList也可以替换成treeNode数组。。。
liuyileneal 2010-04-06
  • 打赏
  • 举报
回复
可以完全使用TreeNode数组来构造啊

TreeNode[] treeNodes = new TreeNode[2];
treeNodes[0] = new TreeNode();
treeNodes[0].Text = "aa";
treeNodes[1] = new TreeNode();
treeNodes[1].Text = "bb";
List<string> alist = new List<string>();
alist.Add("电视机");
alist.Add("洗衣机");
foreach (string a in alist)
{
treeNodes[0].Nodes.Add(a);
}
List<string> blist = new List<string>();
blist.Add("茶具");
blist.Add("洗剧");
foreach (string b in blist)
{
treeNodes[1].Nodes.Add(b);
}
for (int i = 0; i < treeNodes.Length; i++)
{
treeView1.Nodes.Add(treeNodes[i]);
}

名字随便取 2010-04-06
  • 打赏
  • 举报
回复
虎出没,请注意安全
lzsh0622 2010-04-06
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
// 父, 子, 其他
// aa, 电视机, ....
// aa, 洗衣机, ....
// bb, 脸盆 , ....
// bb, 茶杯 , ....

DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("pid");
dt.Rows.Add("1", "aa", "0");
dt.Rows.Add("2", "bb", "0");
dt.Rows.Add("3", "电视机", "1");
dt.Rows.Add("4", "洗衣机", "1");
dt.Rows.Add("5", "脸盆", "2");
dt.Rows.Add("6", "茶杯", "2");

// 以上部分 直接从数据库中select 然后 Fill 到 DataTable。

nodes(this.treeView1.Nodes, dt, 0);
}

private void nodes(TreeNodeCollection tnode, DataTable dt, int id)
{

DataView dview = new DataView(dt); //创建视图 ,因为只有一张表
dview.RowFilter = "[pid]=" + id + ""; //视图的好处,在于能方便筛选数据
foreach (DataRowView row in dview) //显示每个节点的标题,递归!
{
TreeNode node = new TreeNode();
node.Text = row["name"].ToString();
tnode.Add(node);
nodes(node.Nodes, dt, Int32.Parse(row["id"].ToString()));
}
}
luxi0194 2010-04-06
  • 打赏
  • 举报
回复
递归循环,如果确定只有2层的话,hardcode,也可以,先取出aa,bb,cc,等,然后foreach取出来aa下面的电视机,洗衣机等,以此类推。。。。
pandaohua 2010-04-06
  • 打赏
  • 举报
回复
检索出所有数据,按照父,子,其他,字段升序排序
取出每条记录,自己判断,添加即可。
Return门徒 2010-04-06
  • 打赏
  • 举报
回复
没懂你的怕云,想要什么样的TreeView打出个模型来给大家看,会更直观!~
tank_2009 2010-04-06
  • 打赏
  • 举报
回复

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧