DataGridView-Datenmanipulation: effiziente Filtermethode
Je nach Datenquellentyp stehen mehrere Methoden zur Auswahl, um die im DataGridView angezeigten Daten zu filtern, ohne die zugrunde liegende Datenquelle des DataGridView zu ändern. Während das Filtern einer DataTable direkt über ihre Standardansicht unkompliziert ist, ist das Filtern über ein an ein DataSet gebundenes DataMember eine größere Herausforderung.
Szenario 1: DataTable direkt filtern
Wenn die DataSource von DataGridView direkt auf DataTable gesetzt ist, kann die Filterung durch Ändern der DefaultView.RowFilter-Eigenschaft von DataTable implementiert werden. Diese Methode funktioniert, weil die DataTable direkt an die DataGridView gebunden ist, was eine direkte Manipulation ihrer Daten ermöglicht.
Szenario 2: Filtern Sie die an BindingSource gebundene DataTable
Wenn die DataSource von DataGridView eine BindingSource und die DataSource von BindingSource eine DataTable ist, kann die Filterung durch Ändern der BindingSource.Filter-Eigenschaft durchgeführt werden. Diese Methode funktioniert, weil die BindingSource als Vermittler zwischen der DataTable und der DataGridView fungiert und das Filtern ermöglicht, ohne die DataTable selbst zu ändern.
Szenario 3: DataTable über DataMember an DataSet binden
Das Filtern wird komplexer, wenn die DataSource der DataGridView ein DataSet ist und das DataMember auf den DataTable-Namen festgelegt ist. Der Hauptunterschied besteht darin, dass die DataGridView nicht direkt an die DataTable gebunden ist, sondern an die DataTable innerhalb des DataSet.
Gründe für Filterfehler in Szenario drei
In diesem Fall wird beim Filterversuch ds.Tables[0].DefaultView.RowFilter
die DataGridView nicht aktualisiert, da die DataGridView nicht direkt an die DataTable gebunden ist. Es ist an DataSet und DataMember gebunden. Änderungen an der DefaultView der DataTable werden nicht in der DataGridView widergespiegelt, da die DataGridView die Änderungen nicht kennt.
Lösung: Filtern Sie die DataView und binden Sie sie an die DataGridView
Um dieses Problem zu lösen, erstellen Sie eine DataView basierend auf der DataTable, wenden Sie den Filter auf die DataView an und legen Sie die DataSource der DataGridView auf die DataView fest. Dieser Ansatz behält das ursprüngliche DataSet bei und ermöglicht das Filtern, ohne die DataSource der DataGridView zu ändern.
Codebeispiel
<code class="language-csharp">private void textBox1_TextChanged(object sender, EventArgs e) { DataView dv = ds.Tables[0].DefaultView; dv.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text); dataGridViewFields.DataSource = dv; }</code>
Das obige ist der detaillierte Inhalt vonWie filtere ich effektiv eine über DataMember an ein DataSet gebundene DataGridView?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!