0

У меня проблема с привязкой данных в Windows Forms.Как связать свойство DataGridView с WinForms с EF (сбор) в сценарии master-detail?

Вот часть модели 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 называется peopleBindingSource, который установлен в класс Model.Person. В коде позади, я делаю это:

db.People.Include(p => p.Receipts).Load(); 
peopleBindingSource.DataSource = db.People.Local.ToBindingList(); 

Textbox имеет свои DataBindings установлен peopleBindingSource как DataSource и Name как собственность.

Когда я запускаю приложение, навигатор привязки работает правильно, показывая разные люди, когда я нажимаю предыдущие и следующие кнопки. Текстовое поле с именем человека также заполнено правильно.

Теперь здесь возникает проблема:

На той же форме, есть DataGridView. Я хочу, чтобы показать строку для каждой из полученных Человек.

Я попытался связать dataGridView's DataSource с Receipts навигационной функцией peopleBindingSource.

Я ожидал, что gridview будет обновлять свой DataSource в соответствующей коллекции квитанций точно так же, как текстовое поле обновляет свойство Text при изменении навигации. Настройка в основном одинакова.

Дело в том, что ошибка не выбрасывается, а сетка остается пустой (она даже не создает заголовок столбцов).

Почему эта привязка не работает, и может ли это быть сделано внутри дизайнера? Как правильно настроить привязку (без программной обработки события изменения на peopleBindingSource и установки DataSource сетки вручную из peopleBindingSource.Current)?

+0

можете ли вы разместить код, в котором вы привязываете источник данных к вашему datagridview? – stefankmitph

+0

Я не могу, потому что я не связывал его в коде, а в дизайнере. Однако я нашел, в чем проблема. –

ответ

0

Я нашел решение проблемы.

Дело в том, что DataGridView не может связываться с ICollection<Receipt>, поэтому решением было изменить навигационное свойство на BindingList<Receipt>. Затем дизайнер показал свойство правильно.