Filtrage DataGridView efficace avec DataSet : une approche DataTable directe
Filtrer un DataGridView lié à un DataTable au sein d'un DataSet présente un défi unique. Contrairement aux scénarios dans lesquels le DataTable est directement lié ou où un BindingSource est utilisé, la simple modification de la propriété RowFilter
du DataTable n'actualise pas automatiquement l'affichage du DataGridView.
Cette limitation provient de la façon dont DataGridView gère les DataSets. Lorsque le DataSource
est un DataSet, la propriété DataMember
détermine quel DataTable est affiché. Modifier le RowFilter
d'un DataTable non spécifié par DataMember
n'a aucun effet visible sur la grille.
La solution consiste à accéder et à manipuler directement le bon DataTable :
<code class="language-csharp">private void textBox1_TextChanged(object sender, EventArgs e) { DataSet ds = (DataSet)dataGridView1.DataSource; DataTable dt = ds.Tables[dataGridView1.DataMember]; dt.DefaultView.RowFilter = string.Format("country LIKE '%{0}%'", textBox1.Text); }</code>
Cet extrait de code récupère le DataTable actif à l'aide de la propriété DataMember
de DataGridView, puis applique le filtre à son DefaultView
. Cela met directement à jour l'affichage du DataGridView sans nécessiter de modification de la propriété DataSource
.
Essentiellement, cette méthode évite les exceptions qui pourraient survenir lors d'une tentative de refonte du DataSource
en un DataSet, garantissant ainsi la compatibilité avec le code existant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!