Laden...

Doppeltes Databinding: Nur die BindingSource filtern, nicht die dahinter liegende DataTable

Erstellt von caldicot vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.002 Views
C
caldicot Themenstarter:in
51 Beiträge seit 2010
vor 12 Jahren
Doppeltes Databinding: Nur die BindingSource filtern, nicht die dahinter liegende DataTable

Hi,

ich brauche mal wieder Eure Hilfe.

verwendetes Datenbanksystem: <MS SQL Server Compact 3.5>

Das Szenario ist wie folgt:
Ich halte Daten in einem DataTable.
Zum Einen habe ich das DataTable mittels BindingSource an ein DataGridView A gebunden.
Mit einer TextBox kann der Benutzer die Daten filtern.
Ich reagiere auf das TextChanged Event der TextBox und ändere die Filter-Eigenschaft der BindingSource.

Zum Anderen ist das DataTable (nicht die BindingSource) direkt an eine DataGridViewComboBoxColumn eines zweiten DataGridViews B gebunden.

Wenn der Benutzer einen Suchtext in die TextBox eingibt, wird wie erwartet die entsprechenden Daten im DataGridView A angezeigt.

Gleichzeitig greift der Filter aber auch in der DataGridViewComoBoxColumn.
Das ist aber nicht beabsichtigt. In der DataGridViewComboBoxColumn sollen ungefiltert alle Werte aus der DataTable angezeigt werden.

Ich hätte erwartet, dass die Filterung nur durch die BindingSource "sichtbar" ist und das DataTable unverändert bleibt.

Ich hoffe Ihr versteht, was ich meine ...
Habe ich was falsch gemacht, oder wird der Filter wirklich auf das DataTable projeziert?

Vielen Dank
caldicot

771 Beiträge seit 2009
vor 12 Jahren

Hi,

der DataTable hat die DefaultView-Eigenschaft und somit werden alle Sortierungs- und Filteränderungen direkt dahin weitergegeben.

Binde einfach an eine eigene DataView:


DataView dataView = new dataView(dataTable);

control.DataSource = dataView;

C
caldicot Themenstarter:in
51 Beiträge seit 2010
vor 12 Jahren

Vielen Dank, jetzt klappt es.
An die DefaultView Eigenschaft hatte ich nicht gedacht.
Ich hätte gehofft, dass das die BindingSource für mich erledigt..

Jetzt habe ich für das 2. Binding ein extra DataView angelegt und es funtioniert.

Danke für die Hilfe
caldi