Я пытаюсь установить связь между деталями между двумя DataGridView. У меня есть EntityModel с двумя объектами, связанными с Ассоциацией «ClientComissions». Они были созданы из существующей базы данных и имеют свойства навигации, которые работают хорошо. Proof (консольное приложение с использованием упоминалось 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
Все они являются хорошими технологиями для доступа к данным в .NET. Типичный набор данных является старым, и теперь ADO.NET Entity Framework (EF) является новым. по этой причине EF может лучше справляться с отношениями в базе данных. Кроме того, он может использовать технологию LINQ и больше использовать. Но, это не должно быть блокирующим для вас? Я выделил решение проблемы, которую вы задавали в рабочем прототипе. Теперь вы сможете вывести свое собственное решение из этой концепции. –
Спасибо за ваши усилия, но все же я попытался найти способ работать с EF и WinForms. Я знаю, как работать с DataSet. Что касается результата моего исследования - нет прямого пути к «без кодовому» привязке мастер-детали к EF. Существует проект с открытым исходным кодом http://www.codeproject.com/Articles/221931/Entity-Framework-in-WinForms, который делает трюк. – Excelan