无法通过拖动对象的数据源的WinForm创建的GridView(Unable to create G

2019-09-23 09:04发布

我希望通过他们各自的数据源拖到窗体创建一组的DataGridView控制。 我会做,对于一个对象及其导航属性中的一个(从数据源),因此具有在主从关系的两个网格。

移动到Visual Studio 2012(和EF 5.0)后,将第一格栅来通过按预期(与导航器)。 然而,对于“细节”的网格,只在两列显示(“计数”&“IsReadOnly”)。 我与其他表/对象尝试过了,我打的是同样的问题。 我已经试过“编辑列”和“添加列”无可用。 我使用的Northwind作为一个例子。 我想在表单2的datagridview。 一个为客户和其他相关的订单。 一个典型的主/详细视图。

  1. 我添加了一个模型来预测(EDMX)文件。

  2. 增加了一个新的数据源进行建模。 两个对象。 客户和订单表!

  3. 拖着客户实体datagridview的。 所有字段(属性)在网格中。

4拖动从客户实体的订单时,没有命令实体本身,只有两个列名为“伯爵”和“只读”

上述程序在LINQ做工精细为sql VS 2012,EF 4.0,.NET 4.5。 但不适用于EF 5.0。

和,

具体操作步骤中所描述的方式贝丝·马西完全相同http://blogs.msdn.com/b/bethmassi/archive/2008/12/10/master-details-with-entity-framework-explicit-load.aspx然而这不是懒或预先加载的问题!

Answer 1:

在类的实体您尝试与改变导航属性类型工作的ObservableCollection。

由此:

public Customer()
    {
        this.CustomerAddresses = new HashSet<CustomerAddress>();
    }

    public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}

为此:

public Customer()
    {
        this.CustomerAddresses = new ObservableCollection<CustomerAddress>();
    }

    public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}

由于这是自动生成的代码,你还需要改变你的代码生成文件中的一些规则。 手动尝试使这些更改,以确保他们的工作首先然后进行更改。 对我来说,我不得不作出以下修改我.TT文件

添加使用System.Collections.ObjectModel通过增加线低于提到。

return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
        ? string.Format(
            CultureInfo.InvariantCulture,
            "{0}using System;{1}" +
            "{2}",
            inHeader ? Environment.NewLine : "",
            includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
            includeCollections ? (Environment.NewLine + "using System.Collections.ObjectModel;") : "",
            inHeader ? "" : Environment.NewLine)
        : "";

改变你的HastSet声明观察集合

this.<#=code.Escape(navigationProperty)#> = new ObservableCollection<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();

此外,这里的变化ICollection的是的ObservableCollection

navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,

你的代码生成的文件可能与我的不同,但这些部分代码应该给你的文件可供搜索的内容的想法。



文章来源: Unable to create Gridview by dragging Object DataSource to WinForm