0
我試圖建立兩個DataGridView之間的主 - 細節關係。 我有一個EntityModel與「ClientComissions」Association連接的兩個實體。 它們是從現有數據庫生成的,具有導航屬性,可以很好地工作。 證明(控制檯應用程序使用提到EntityModel):以「主 - 細節」方式將DataGridView綁定到實體
using (var context = new MnxEntities())
{
Client client = context.Clients.FirstOrDefault();
// profiler: "SELECT TOP (1) ... FROM [Clients] AS [c]" - Ok!
Console.WriteLine("Client: {0}", client.Name);
foreach (Comission comission in client.NavComissions)
// profiler: "SELECT ... FROM [Comissions] WHERE [StateCode] = '20971504'" - Ok!
{
Console.WriteLine("Agreement number: {0}", comission.Dog_Num);
}
}
但我不能在窗口形式結合在主 - 從方式在兩個DataGridViews:
private void tabComissions_Enter(object sender, EventArgs e)
{
using (var context = new MnxEntities())
{
clientDataGridView.DataSource = context.Clients;
comissionsDataGridView.DataSource = clientDataGridView.DataSource;
comissionsDataGridView.DataMember = "WHAT SHOULD BE HERE?";
}
}
我知道有一個BindingContext,它必須使用CurrencyManager完成所有工作,不需要手寫代碼。
我在這裏呆了很多時間。請幫助。
UPD:
private void AnswerFromStackRefactored()
{
using (var context = new MnxEntities())
{
clientBindingSource.DataSource = context;
clientBindingSource.DataMember = "Clients";
navComissionsBindingSource.DataSource = clientBindingSource;
navComissionsBindingSource.DataMember = "NavComissions";
}
}
此代碼加載收預訂費只有一次,在網格中的第一個客戶。 但是,當我更改客戶端網格中的當前行時,不再有對數據庫的查詢,並且navComissionsGrid總是顯示第一個客戶端的調用。 :(
DataSet和EntityDataModel之間有區別 – Excelan 2012-04-27 04:44:05
它們都是.NET中數據訪問的好技術,Typed數據集是舊的,現在ADO.NET實體框架(EF)是新的。因此,EF可以更好地處理數據庫中的關係,並且可以利用LINQ技術的優勢,並且更具說服力有用的。但是,這不應該成爲你的阻擋者?我已經強調了您在工作原型中所要求的問題的解決方案。現在,你應該能夠從這個概念中推導出你自己的解決方案。 – 2012-04-27 09:56:05
感謝您的努力,但仍試圖找到一種與EF和WinForms協同工作的方法。我知道如何使用DataSet。至於我的調查結果 - 沒有直接的方式來「無代碼」的主 - 細節綁定到EF。有一個開源項目http://www.codeproject.com/Articles/221931/Entity-Framework-in-WinForms可以做到這一點。 – Excelan 2012-04-27 11:17:30