2017-01-31 4 views
6

Что дает мне, используя что-то вроде этого:BindingSource - каковы преимущества использования BindingSource

DataGridView dgvDocuments = new DataGridView(); 
BindingSource bindingSource = new BindingSource(); 
DataTable dtDocuments; 

dtDocuments = MsSQL.GetDocuments(dtpOd.Value, dtpDo.Value); 
bindingSource.DataSource = dtDocuments; 
dgvDocuments.DataSource = bindingSource; 

вместо этого:

DataGridView dgvDocuments = new DataGridView(); 
DataTable dtDocuments; 

dtDocuments = MsSQL.GetDocuments(dtpOd.Value, dtpDo.Value); 
dgvDocuments.DataSource = dtDocuments; 
+0

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

ответ

1

BindingSource имеют много преимуществ, ниже некоторые из них

1) Когда вы привязываете данные к любому элементу управления с помощью источника привязки, он будет действовать с обеих сторон. Любые изменения, внесенные в эффекты источника данных для контроля и любые изменения в источнике данных эффектов управления. Вам не нужно значение тейк из-под контроля и назначить снова

2) DataSource Вы можете обратиться к filterdatasource с bindingsource

3) Вы можете работать с одним datasource привязана к какому-many controls. Например, у вас есть таблица Fruits, и вы связываете это table с 2 DataGridView, чтобы показать Aplles и Peaches отдельно. С bindingsourceFilter недвижимость вы можете показать Apples и Peaches отдельно.

4) Вы можете сделать поиск, сортировка, редактирование, фильтрация с BindingSource

Вы не можете видеть BindingSource преимущество по основным спискам, но есть больше, чем базовый список вы увидите, как BindingSource является полезным.

Вы можете получить более informtaion Here

3

Одним из преимуществ является то, что если вы манипулировать значениями в DataGridView вручную, то изменения будут отражены в базовых данных. (EDIT: по-видимому, это также работает с обязательным нормальным DataSource.)

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

enter image description here

Это Detailed Data Binding Tutorial может помочь пролить свет на возможности связывания данных в целом

EDIT:

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

Так что если у вас есть список лиц:

List<pers> list = new List<pers>(); 
BindingSource bs = new BindingSource(); 
bs.DataSource = perlist; 
dataGridView1.DataSource = bs; 

и позже хотите добавить новый элемент в список в коде, просто создать новый экземпляр BindingSource, переназначить его на DataGridView.DataSource

list.Add(new pers()); 

bs = new BindingSource(); 
bs.DataSource = perlist; 

dataGridView1.DataSource = bs; 

и новый элемент будет отображаться

+0

Я не уверен, что мне что-то не хватает, но для меня изменения отражаются в обоих направлениях, даже без 'BindingSource' – Slai

+0

@Slai вы правы. Интересно, какую ошибку я совершил в прошлый раз, когда пытался, и это не сработало. Поэтому я сохранил это в своем мозгу как преимущество, потому что вместо обычного привязки я использовал «BindingSource» и решил свою проблему. –

+1

много учебников и примеров кода используют его, поэтому для большинства может показаться, что это необходимо. Visual Studio создает BindingSource при привязке данных через конструктор, поэтому может быть некоторое использование, о котором я не знаю (возможно, отделяя логику фильтрации и сортировки от источника данных). 'BindingSource' необходим, когда данные привязывают некоторые коллекции, такие как' Словарь', но я не вижу в этом большого смысла. – Slai