如何呈现 1:n 关系
本文关键字:关系 何呈现 | 更新日期: 2023-09-27 17:56:27
我正在使用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,一个列表)。感谢您的任何提示。
我会尽量保持简短,因为我不相信这个问题是堆栈溢出的主题。但是,无论哪种方式,答案都不需要很长。无论您有多少层层次结构,答案都是一样的。在 WPF 中,当我们有一个可以有一个或多个子项的父项时,我们只需在集合控件中显示这些子项。
您的DataGrid
也是如此...每一行(父行)的其中一列中可以有一个ComboBox
或ListBox
,以保存多个子项。现在,即使您拥有另一级的 Operation
对象集合,每个对象都有其Series
对象的集合,每个对象都有自己的内部Operation
对象,那么您也可以将层次结构向上移动一个级别。
顶级项的每一行都可以在其一列中有一个DataGrid
,以保存多个子项。话虽如此,我觉得在这个级别上,您最好创建自己的自定义 UI,可能使用可折叠的 Expander
或其他节省空间的措施。