2 つの DataGridView 間にマスター/ディテール関係を確立しようとしています。「ClientComissions」アソシエーションによって接続された 2 つのエンティティを持つ EntityModel があります。それらは既存の DB から生成され、適切に機能するナビゲーション プロパティを備えています。証明 (前述の EntityModel を使用したコンソール アプリ):
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);
}
}
しかし、Windows フォームで 2 つの DataGridView をマスター/ディテール方式でバインドすることはできません。
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?";
}
}
手書きのコードを必要とせずに、CurrencyManager を使用してすべての作業を行う必要がある BindingContext があることは知っています。
私は長い間ここに立ち往生しています。助けてください。
更新:
private void AnswerFromStackRefactored()
{
using (var context = new MnxEntities())
{
clientBindingSource.DataSource = context;
clientBindingSource.DataMember = "Clients";
navComissionsBindingSource.DataSource = clientBindingSource;
navComissionsBindingSource.DataMember = "NavComissions";
}
}
このコードは、グリッド内の最初のクライアントに対して一度だけコミッションをロードします。しかし、クライアント グリッドの現在の行を変更すると、DB へのクエリがなくなり、navComissionsGrid は常に最初のクライアントのコミッションを表示します。:(