我在Windows窗體中有一個數據綁定問題。如何將主窗口中的WinForms'DataGridView綁定到EF導航屬性(集合)?
這裏的EF模型的一部分是相關的故事:
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; }
}
}
有一個名爲BindingSource的被設置爲Model.Person
類peopleBindingSource
。在後面的代碼,我這樣做:
db.People.Include(p => p.Receipts).Load();
peopleBindingSource.DataSource = db.People.Local.ToBindingList();
文本框有其數據綁定設置爲peopleBindingSource
爲DataSource和Name
作爲屬性。
當我運行應用程序時,綁定導航器正常工作,顯示不同的人,因爲我點擊上一個和下一個按鈕。帶有人名的文本框也正確填充。
現在,來這裏的問題:
在相同的形式,有一個DataGridView。我想顯示一行爲每個當前選定的收據人。
我試圖綁定dataGridView's DataSource
到Receipts
導航屬性peopleBindingSource
。
我曾預計,gridview將更新其DataSource到相應的收據集合,就像文本框在導航更改時更新其Text屬性一樣。該設置基本相同。
事情是,沒有錯誤拋出,並且網格仍然是空的(它甚至不創建列標題)。
爲什麼不能使用這個綁定工作,並且這可以從設計器內部完成?如何正確設置綁定(沒有以編程方式處理peopleBindingSource上的change事件並從peopleBindingSource.Current中手動設置網格的DataSource)?
你可以發佈代碼將數據源綁定到datagridview的代碼嗎? – stefankmitph
我不能因爲我沒有在代碼中綁定它,而是在設計器中綁定它。但是,我發現問題是什麼。 –