如何绑定WinForms';DataGridView到主详细场景中的EF导航属性(集合)?
我在Windows窗体中遇到数据绑定问题 以下是EF模型中与故事相关的部分:如何绑定WinForms';DataGridView到主详细场景中的EF导航属性(集合)?,winforms,data-binding,datagridview,entity-framework-6,bindingsource,Winforms,Data Binding,Datagridview,Entity Framework 6,Bindingsource,我在Windows窗体中遇到数据绑定问题 以下是EF模型中与故事相关的部分: namespace Model { class Person { [Key] public int Id { get; set; } public String Name { get; set; } public virtual ICollection<Receipt> Receipts { get; set; }
namespace Model
{
class Person
{
[Key]
public int Id { get; set; }
public String Name { get; set; }
public virtual ICollection<Receipt> Receipts { get; set; }
}
class Receipt
{
[Key]
public int Id { get; set; }
public DateTime Timestamp { get; set; }
public double Value { get; set; }
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
}
Textbox的数据绑定设置为peopleBindingSource
作为数据源,而Name
作为属性
当我运行应用程序时,绑定导航器工作正常,在我单击“上一步”和“下一步”按钮时显示不同的人。带有此人姓名的文本框也已正确填充
现在,问题来了:
在同一表单上,有一个DataGridView。我想为当前选中的人员的每个收据显示一行
我已尝试将dataGridView的数据源
绑定到peopleBindingSource
的Receipts
导航属性
我期望gridview将其数据源更新为相应的收据集合,就像textbox在导航更改时更新其文本属性一样。设置基本相同
问题是,不会抛出错误,网格保持为空(它甚至不会创建列标题)
为什么这个绑定不起作用,并且可以从设计器内部完成?如何正确设置绑定(无需以编程方式处理peopleBindingSource上的更改事件并从peopleBindingSource.Current手动设置网格的数据源) 我找到了这个问题的解决办法
问题是
DataGridView
无法绑定到ICollection
,因此解决方案是将导航属性更改为bindingslist
。然后设计师正确地显示了属性 你能把数据源绑定到datagridview的代码发布到哪里吗?我不能,因为我没有在代码中绑定它,而是在设计器中绑定它。然而,我发现了问题所在。
db.People.Include(p => p.Receipts).Load();
peopleBindingSource.DataSource = db.People.Local.ToBindingList();