2009-02-04 9 views
7

Ich habe eine Tabelle mit sage 1640 Elemente. Ich setzeWie erhalten Sie die sichtbare Anzahl der Zeilen von DataGridView nach BindingSource.Filter?

bindingSource.Filter = "some filter query string"; 

und die meisten Reihen verschwinden und verlassen, sagen wir 400 Reihen. Ich möchte in der Lage sein, dem Benutzer "400 von 1640 Elementen anzeigen" zu zeigen, wenn er auf einige Textfelder klickt, die die Filterzeichenfolge ändern und damit die Zeilen im dataGridView-Objekt sichtbar sind (ähnlich wie iTunes, aber für medizinische Daten, nicht für Genres/Künstler/Alben, die Lieder filtern).

Ich versuchte BindingSource.Count und es ist immer 1640, egal was die Filterzeichenfolge eingestellt ist (obwohl viel weniger Zeilen wie gewünscht angezeigt werden). Ich habe versucht, alle Zeilen in dataGridView.Rows zu durchlaufen und nur die Zeilen zu zählen, die sichtbar sind, aber immer noch zu 1640.

Woher bekomme ich diese Informationen?

Beachten Sie, dass ich nicht SQL verwende, aber bindingSource.DataSource ist eine DataSource aus einer DataView, die um eine DataTable gewickelt ist (aus einem dataSet, das aus XML gelesen wird).

+0

I hatte einen Fehler, wo dieser Code nicht einmal am Anfang aufgerufen wurde! Hoppla! Es gibt mindestens zwei Möglichkeiten, die Anzahl zu finden. Siehe meine Antwort. –

Antwort

1

Wie wäre es mit dem Hinzufügen der gefilterten Elemente in einer separaten DataTable und damit für die gefilterten Elemente zählen.

3

Jared,

Ich musste vor kurzem dieses Ding tun. Was für mich funktionierte, war die Verwendung der DataGridView.Rows.Count-Eigenschaft, nachdem ich den Filter angewendet hatte.

Setzen Sie Ihre Datenquelle auf die DataSource-Eigenschaft der BindingSource oder der DataGridView? Es sollte die BindingSource sein.

HTH -Jay

+0

Das hat super funktioniert! – TWood

1

ich etwas anderes nach oben geschraubt. Jay hat Recht:

dataGridViewCases.Rows.Count 

Werke, wie auch:

bindingSource.Count 
14

Versuchen Sie folgendes: datagridviewname.Rows.GetRowCount(DataGridViewElementStates.Visible);

+1

thanks this half – user3813249

+1

Diese Lösung ist viel besser als die angenommene Antwort, weil es die Datentabelle nicht dupliziert. Es besteht keine Notwendigkeit, die Tabelle zu duplizieren und somit doppelt so viel Speicher zu verwenden, als wenn Sie nur einen hätten. – Chad

0

Sie brauchen nur Count-Eigenschaft Ihrer Binding verwenden ...

ExampleBindoneSource.Count()