【发布时间】:2015-12-28 02:50:26
【问题描述】:
我有一个入门类:
public class Entry
{
public int Key { get; set; }
public string Name { get; set; }
}
和一个组类:
public class Group
{
public int Key { get; set; }
public string Name { get; set; }
public List<Group> SubGroups { get; set; }
public List<Entry> Entries { get; set; }
public List<object> Items
{
get
{
List<object> childNodes = new List<object>();
foreach (var group in this.SubGroups)
childNodes.Add(group);
foreach (var entry in this.Entries)
childNodes.Add(entry);
return childNodes;
}
}
}
我可以像这样手动向 treeView 添加数据:
public class TestData
{
public List<Group> Groups = new List<Group>();
public void Load()
{
Group grp1 = new Group() { Key = 1, Name = "Group 1", SubGroups = new List<Group>(), Entries = new List<Entry>() };
Group grp2 = new Group() { Key = 2, Name = "Group 2", SubGroups = new List<Group>(), Entries = new List<Entry>() };
Group grp3 = new Group() { Key = 3, Name = "Group 3", SubGroups = new List<Group>(), Entries = new List<Entry>() };
Group grp4 = new Group() { Key = 4, Name = "Group 4", SubGroups = new List<Group>(), Entries = new List<Entry>() };
//grp1
grp1.Entries.Add(new Entry() { Key = 1, Name = "Entry number 1" });
grp1.Entries.Add(new Entry() { Key = 2, Name = "Entry number 2" });
grp1.Entries.Add(new Entry() { Key = 3, Name = "Entry number 3" });
//grp2
grp2.Entries.Add(new Entry() { Key = 4, Name = "Entry number 4" });
grp2.Entries.Add(new Entry() { Key = 5, Name = "Entry number 5" });
grp2.Entries.Add(new Entry() { Key = 6, Name = "Entry number 6" });
//grp3
grp3.Entries.Add(new Entry() { Key = 7, Name = "Entry number 7" });
grp3.Entries.Add(new Entry() { Key = 8, Name = "Entry number 8" });
grp3.Entries.Add(new Entry() { Key = 9, Name = "Entry number 9" });
//grp4
grp4.Entries.Add(new Entry() { Key = 10, Name = "Entry number 10" });
grp4.Entries.Add(new Entry() { Key = 11, Name = "Entry number 11" });
grp4.Entries.Add(new Entry() { Key = 12, Name = "Entry number 12" });
Groups.Add(grp1);
Groups.Add(grp2);
Groups.Add(grp3);
Groups.Add(grp4);
grp1.SubGroups.Add(grp2);
grp2.SubGroups.Add(grp3);
}
及其加载数据类
private void LoadView()
{
TestData data = new TestData();
data.Load();
GroupView.ItemsSource = data.Groups;
}
但是,我想像这样从数据库中填充树视图:
ID groupFlag fatherID Name
1 1 Null Group1
2 1 1 Group1.1
3 0 2 Entry1
4 0 2 Entry2
5 1 Null Group2
6 0 5 Entry3
任何帮助将不胜感激...
【问题讨论】:
-
我想您正在寻找递归。你的
Group是 DB 类?你到底想要什么样的结构? -
如果你有一个包含组和条目表的数据库,其中包含一些数据,你只需要一个 sql 命令。然后你可以建立一个 sql 连接并填充你的树视图。
-
Entry和Group,从DB读取,表和自己有关系,FatherID指向Father组...
-
您的问题是“如何将平面列表转换为层次结构”,类似于 this question 或 this question,还是您的问题是“如何将 WPF 树视图绑定到层次结构”,类似于this question?