有一种数据结构
1
1-1
1-1-1
1-2
1-2-1
1-2-2
1-2-3
1-3
2
2-1
2-2
2-3
2-3-1可能有的数据如1-4-12-3-2-32-2到无穷
当然都是从大到小排列的
我们需要动态的地把它们加载到一个TreeView树形控件中,谈谈各自想法?
高分送上,不够再加
1
1-1
1-1-1
1-2
1-2-1
1-2-2
1-2-3
1-3
2
2-1
2-2
2-3
2-3-1可能有的数据如1-4-12-3-2-32-2到无穷
当然都是从大到小排列的
我们需要动态的地把它们加载到一个TreeView树形控件中,谈谈各自想法?
高分送上,不够再加
{
public static IEnumerable<TreeNode> myconvert(this TreeNodeCollection tds)
{
foreach (TreeNode td in tds)
yield return td;
foreach (TreeNode x in tds)
foreach (var r in myconvert(x.ChildNodes))
yield return r;
} public static void myAdd(this TreeNodeCollection tds,string path)
{
var temp = path.Split('-');
TreeNode td = new TreeNode();
int deep = 0;
foreach (var item in temp)
{
string tempPath = string.Join("/", temp, 0, deep + 1); var p = tds.myconvert().FirstOrDefault(c => c.ValuePath == tempPath);
if (p==null)
{
p = new TreeNode();
p.Value = item;
p.Text = item;
if (String.IsNullOrEmpty(td.Value))
{
td=p;
tds.Add(td);
}
else
{
td.ChildNodes.Add(p);
}
}
else
{
td=p;
}
deep++;
}
}
}调用方式:
this.TreeView1.Nodes.Clear();
this.TreeView1.Nodes.myAdd("1");
this.TreeView1.Nodes.myAdd("1-1");
this.TreeView1.Nodes.myAdd("1-1-1");
this.TreeView1.Nodes.myAdd("1-2");
this.TreeView1.Nodes.myAdd("1-2-1");
this.TreeView1.Nodes.myAdd("1-2-2");
this.TreeView1.Nodes.myAdd("1-3");
this.TreeView1.Nodes.myAdd("2");
this.TreeView1.Nodes.myAdd("2-1");
this.TreeView1.Nodes.myAdd("2-1-1");实际上使用linq还有更简单的方式,不过我的linq学的不好,就只能这么将就了,嘿嘿,没有专门去学linq的特殊构造和扩展,只是用比较常见的查询完成