【问题标题】:How to present a 1:n Relationship?如何呈现 1:n 关系?
【发布时间】:2014-04-03 09:57:58
【问题描述】:

我正在使用 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,一个列表)的最佳/正确的演示对象是什么。感谢您的任何提示。

【问题讨论】:

    标签: c# wpf linq entity-framework data-binding


    【解决方案1】:

    我会尽量保持简短,因为我不相信这个问题是 Stack Overflow 的主题。但是,无论哪种方式,答案都不需要很长。无论您有多少层次结构,答案都是相同的。在 WPF 中,当我们有一个可以有一个或多个子级的父级时,我们只需在集合控件中显示子级。

    您的DataGrid 也是如此...每一行(父行)可以在其中一个列中有一个ComboBoxListBox 来保存多个子项。现在,即使您有另一个级别的 Operation 对象集合,每个对象都有自己的 Series 对象集合,每个对象都有自己的内部 Operation 对象,那么您也可以将层次结构上移一个级别。

    顶层项目的每一行都可以在其中一个列中包含一个DataGrid,以保存多个子项目。话虽如此,我觉得在这个级别上,您最好创建自己的自定义 UI,可能使用可折叠的Expanders 或其他节省空间的措施。

    【讨论】:

    • 谢谢,我猜你改变了我看待问题的方式。祝你周末愉快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    相关资源
    最近更新 更多