Вопрос

Я хочу показать список людей в DataGridView в приложении Windows Forms. Я хочу, чтобы мой уровень обслуживания вернул список объектов человека (например, IList<Person>) Я хочу, чтобы изменения в списке были отражены в DataGridView наоборот. Насколько я понимаю, используя BindingSource облегчает работу DataGridView. Анкет Мой вопрос в том, чтобы двухсторонняя база данных о работе, нужно ли мне:

//pseudo code
BindingSource.DataSource = IBindingList<Person>

Или я могу сделать:

BindingSource.DataSource = IList<Person>

Какая разница? Если мои изменения в список будут DataGridView в любом случае обновлять? И если мне придется использовать BindingList, кажется немного шатким (из -за создания зависимости), чтобы вернуть BindingList Из моего сервисного слоя, есть ли это способ обойти это?

Microsoft говорит о BindingList (В разделе замечаний)http://msdn.microsoft.com/en-us/library/ms132679.aspx:

«Однако типичный программист решения будет использовать класс, который предоставляет функциональность привязки данных, например, как BindingSource, вместо прямого использования BindingList<T>."

Это было полезно?

Решение

Если вы используете BindingList<T> Затем изменения, которые вы вносите через базовый список, будут отражены в элементах управления Data Bound, поскольку BindingList повышает событие при изменении списка. Большинство других коллекций нет.

Если вы используете нормальную коллекцию в качестве источника данных, то изменения, которые вы вносите через другие элементы управления, связанных с данными (или через BindingSource), все еще будут отражены, но изменения в базовой сборе непосредственно не будут.

Другие советы

Связывание с IList<Person> даст вам только одностороннее привязку; Изменения в списке или элементах списка не будут отражены в DataGridView. Анкет Вы можете использовать BindingList или же BindingSource вместо этого получить эту функциональность, но ваш Person Классу все еще нужно поддержать INotifyPropertyChanged Или иначе вы получите синхронизацию только при добавлении/удалении элементов в/из списка, а не при изменении сами элементов списка.

Если вы хотите избежать зависимости от System.Windows.Forms, вы можете использовать ObservableCollection<Person> вместо; Это поддерживает необходимые уведомления об изменениях и поэтому может использоваться в качестве двустороннего источника связывания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top