我正在使用EntityFramework 6和WPF在一个项目中工作。我在EF6中使用了代码优先,重要部分如下:
public class Serie
{
public virtual Operation CurrentOperation { get; set; }
}
和
public class Operation
{
public Operation()
{
this.Series = new ObservableCollection<Serie>();
}
public virtual ObservableCollection<Serie> Series { get; set; }
}
这一切都很好。所以我有一个像Series (n) - (1) Operation
这样的表关系,一个操作可以有零/ 1 /多个系列。
现在,我完全不知道如何在DataGrid / DataTable / Collection
中展示这种关系。我希望有类似的东西:(动态生成)
Operation 1 Operation 2 Operation 3
-------------------------------------
Series 1.1 Series 2.1 Series 3.1
Series 1.2 Series 2.2 Series 3.2
Series 1.3 Series 2.2 Series 3.2
操作名称应该是表格标题,下面是它们的相关系列。通常我使用数据绑定(WPF样式),我尝试过类似的东西:
using (var _context = new ProdPlanNET.Models.DatabaseContext())
{
_context.Operations.Load();
var res = from operation in _context.Operations
select operation.Name;
foreach (String Name in res)
{
DataColumn c;
c = new DataColumn();
c.ColumnName = Name;
dt.Columns.Add(c);
}
}
也是使用CollectionViewSource尝试,但没有成功。我甚至不知道View
(DataGrid,列表)的最佳/正确表示对象是什么。感谢任何提示。
答案 0 :(得分:1)
我会尽量保持简短,因为我不相信这个问题是关于Stack Overflow的主题。但是,无论如何,答案都不需要很长。无论您拥有多少层次结构,答案都是一样的。在WPF中,当我们有一个可以有一个或多个子节点的父节点时,我们只需在集合控件中显示子节点。
同样适合您的DataGrid
...每一行(父级)可以在其中一列中拥有ComboBox
或ListBox
来保存多个子项。现在,即使你有一个Operation
个对象集合的另一个级别,每个对象都有Series
个对象的集合,每个对象都有自己的内部Operation
个对象,那么你可以只移动你的层次结构一个级别。
顶级项目的每一行都可以在其中一列中包含DataGrid
来保存多个子项目。话虽如此,我觉得在这个级别上,您最好创建自己的自定义用户界面,可能使用可折叠的Expander
或其他节省空间的措施。