Powiąż DataGridView z obiektami w sposób „master-detail”
Usiłuję ustanowić relację master-detail między dwoma DataGridView. Mam EntityModel z dwoma podmiotami połączonymi przez stowarzyszenie „ClientComissions”. Zostały one wygenerowane z istniejącej bazy danych i mają dobre właściwości nawigacji. Dowód (aplikacja konsolowa wykorzystująca wspomniany EntityModel):
<code> 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); } } </code>
Ale nie mogę powiązać dwóch DataGridViews w sposób master-detail na formularzu Windows:
<code> 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?"; } } </code>
Wiem, że istnieje BindingContext, który musi wykonać całą pracę przy użyciu CurrencyManager, bez konieczności pisania ręcznego kodu.
Utknąłem tu na długo. Prosimy o pomoc.
UPD:
<code> private void AnswerFromStackRefactored() { using (var context = new MnxEntities()) { clientBindingSource.DataSource = context; clientBindingSource.DataMember = "Clients"; navComissionsBindingSource.DataSource = clientBindingSource; navComissionsBindingSource.DataMember = "NavComissions"; } } </code>
ten kod ładuje Komendy tylko raz, dla pierwszego klienta w sieci. Ale gdy zmieniam Bieżący wiersz w Siatce klientów, nie ma już zapytania do DB, a navComissionsGrid zawsze pokazuje komisję dla pierwszego klienta. :(