DataSet を使用した効率的な DataGridView フィルタリング: DataTable への直接的なアプローチ
DataSet 内の DataTable にリンクされた DataGridView をフィルタリングすると、独特の課題が生じます。 DataTable が直接バインドされているシナリオや BindingSource が使用されているシナリオとは異なり、DataTable の RowFilter
プロパティを変更するだけでは、DataGridView の表示は自動的に更新されません。
この制限は、DataGridView が DataSet を処理する方法に起因します。 DataSource
が DataSet の場合、DataMember
プロパティによってどの DataTable が表示されるかが決まります。 RowFilter
で指定されていない DataTable の DataMember
を変更しても、グリッドには目に見える影響はありません。
この解決策には、正しい 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>
このコード スニペットは、DataGridView の DataMember
プロパティを使用してアクティブな DataTable を取得し、フィルターをその DefaultView
に適用します。 これにより、DataSource
プロパティを変更することなく、DataGridView の表示が直接更新されます。
重要なのは、このメソッドは、DataSource
を DataSet に再キャストしようとするときに発生する可能性のある例外を回避し、既存のコードとの互換性を確保することです。
以上がデータソースを変更せずにデータセットにバインドされたデータグリッドビューをフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。