我希望通过他们各自的数据源拖到窗体创建一组的DataGridView控制。 我会做,对于一个对象及其导航属性中的一个(从数据源),因此具有在主从关系的两个网格。
移动到Visual Studio 2012(和EF 5.0)后,将第一格栅来通过按预期(与导航器)。 然而,对于“细节”的网格,只在两列显示(“计数”&“IsReadOnly”)。 我与其他表/对象尝试过了,我打的是同样的问题。 我已经试过“编辑列”和“添加列”无可用。 我使用的Northwind作为一个例子。 我想在表单2的datagridview。 一个为客户和其他相关的订单。 一个典型的主/详细视图。
我添加了一个模型来预测(EDMX)文件。
增加了一个新的数据源进行建模。 两个对象。 客户和订单表!
拖着客户实体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然而这不是懒或预先加载的问题!
在类的实体您尝试与改变导航属性类型工作的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,
你的代码生成的文件可能与我的不同,但这些部分代码应该给你的文件可供搜索的内容的想法。