2017-01-31 38 views
6

Co daje mi pomocą czegoś takiego:BindingSource - jakie są zalety korzystania z BindingSource

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

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

zamiast tego:

DataGridView dgvDocuments = new DataGridView(); 
DataTable dtDocuments; 

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

Znalazłem jeszcze jedną znaczącą różnicę. Możesz sprawdzić moją edycję. Możesz również rozważyć zaakceptowanie jednej z odpowiedzi, która była dla Ciebie pomocna. –

Odpowiedz

1

BindingSource mają wiele korzyści, poniżej niektóre z nich

1) Po powiązaniu danych z dowolną formantem za pomocą źródła powiązań, zacznie obowiązywać obie strony. Wszelkie zmiany w efektach źródła danych w celu kontroli i wszelkich zmian w źródle danych efektów kontrolnych. Nie trzeba brać od wartości kontroli i przypisać ponownie

2) źródła danych można zastosować filter do datasource z bindingsource

3) Można pracować z jednym datasource zbindowanych do many controls. Na przykład masz tabelę Fruits i wiążesz to table z 2 DataGridView, aby oddzielnie pokazać Aplles i . Właściwość bindingsourceFilter umożliwia oddzielne wyświetlanie Apples i Peaches.

4) Można wykonać wyszukiwanie, sortowanie, edytowanie, filtrowanie z BindingSource

Nie widać korzyści BindingSource na podstawowych listach, ale jest więcej niż podstawowa lista widać jak BindingSource jest przydatna.

Możesz uzyskać więcej informacji Here

3

Jedną z zalet jest to, że jeśli manipulować wartości w DataGridView ręcznie, a następnie zmiany zostaną odzwierciedlone w podstawowych danych. (EDIT: widocznie ta działa również z obowiązującymi normalny DataSource.)

Kolejną zaletą jest to, że masz możliwość dodania wpisu do danych bazowych (przynajmniej jeśli jest to List) klikając na dodatkowym pustym polu i edytuj wartości. Spowoduje to dodanie nowego przedmiotu bez dodatkowego kodu do napisania.

enter image description here

Ten Detailed Data Binding Tutorial może pomóc rzucić więcej światła na możliwościach danych obowiązujących w ogólnym

EDIT:

Jeszcze jedna różnica jest taka, że ​​manipulacja danych źródłowych, takich jak dodawanie pozycja na liście nie zostanie odzwierciedlona w DataGridView, nawet jeśli ponownie zostanie przypisana właściwość DataSource, która działałaby na przykład w postaci ComboBox. Ale ponowne przypisanie nowej instancji modelu BindingSource wystarczy.

Więc jeśli masz listę osób:

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

a później chcesz dodać nowy element do listy w kodzie, wystarczy utworzyć nową instancję BindingSource, przypisać go do DataGridView.DataSource

list.Add(new pers()); 

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

dataGridView1.DataSource = bs; 

i nowa pozycja będzie wyświetlacz

+0

Nie jestem pewien, czy czegoś brakuje, ale dla mnie zmiany są odzwierciedlane w obie strony, nawet bez 'BindingSource' – Slai

+0

@Slai masz rację. Zastanawiam się, jaki błąd popełniłem ostatnio, kiedy próbowałem i nie wyszło. Więc zapisałem to w moim mózgu jako zaletę, ponieważ użyłem 'BindingSource' zamiast normalnego wiązania i rozwiązałem mój problem. –

+1

używa wielu tutoriali i próbek kodu, więc dla większości może się wydawać, że jest to potrzebne. Visual Studio tworzy BindingSource, gdy wiązanie danych odbywa się za pomocą Designer, więc może być pewne jego wykorzystanie, którego nie jestem świadomy (może oddzielić logikę filtrowania i sortowania od źródła danych). 'BindingSource' jest potrzebny, gdy dane wiążą niektóre kolekcje, takie jak' Dictionary', ale w przeciwnym razie nie widzę ich zbyt wiele. – Slai

Powiązane problemy