トップ回答者
DataGridViewの再検索や条件検索はできますか。

質問
-
何度も同じ質問ですみません。
以前、DataGridViewのComboBoxの選択肢を変更後、update()を実行しても更新されない件で質問した際、以下のリンクページを紹介頂きました。
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx
このページ通りにComboBoxを実装し、更新したところ、希望通り更新されました。
ただ、このDataGridViewに対し、再検索や条件検索をする方法がわかりません。
上記の事をする場合、リンクページのサンプルコードに対し、検索関係のコードを記述すれば動く物なのでしょうか。
※このメソッドを使えば~、このコードを利用すれば~等のヒント的な情報でも有難いです。
正直、どう書けば条件検索できるか全然分からないため、ご協力頂ければ嬉しいです。
以上、説明不足で申し訳ありませんが、どうぞよろしくお願いします。
回答
-
具体的にどのような検索をしたいのか不明ですが・・・
例えば参考にしている記事の例で PorductName であいまい検索をかけるとすると、データソースの DataTable から DefaultView プロパティを使って DataView を取得し、その RowFilter プロパティに検索条件を設定するという方法が考えられます。
それでよければ、Form に TextBox と Button を追加し、Button の Click イベントのハンドラに以下のコードを書いてみてください。
private void button1_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(this.textBox1.Text)) { // DataView を取得して、その RowFilter プロパティに検索条件を設定 this.northwindDataSet.Products.DefaultView.RowFilter = "ProductName LIKE '%" + this.textBox1.Text + "%'"; // DataGridView に検索結果を反映 this.productsBindingSource.DataSource = this.northwindDataSet.Products; } else { // 元に戻す場合 this.northwindDataSet.Products.DefaultView.RowFilter = ""; } }
TextBox に検索する文字列を入力して Button をクリックすれば検索結果が表示されるはずです。例えば "ch" という文字で検索すると、ProductName に "ch" という文字を含むレコードが表示されます。
- 編集済み SurferOnWww 2021年2月22日 7:14 画像追加
- 回答としてマーク mexicanafro 2021年2月22日 9:42
すべての返信
-
具体的にどのような検索をしたいのか不明ですが・・・
例えば参考にしている記事の例で PorductName であいまい検索をかけるとすると、データソースの DataTable から DefaultView プロパティを使って DataView を取得し、その RowFilter プロパティに検索条件を設定するという方法が考えられます。
それでよければ、Form に TextBox と Button を追加し、Button の Click イベントのハンドラに以下のコードを書いてみてください。
private void button1_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(this.textBox1.Text)) { // DataView を取得して、その RowFilter プロパティに検索条件を設定 this.northwindDataSet.Products.DefaultView.RowFilter = "ProductName LIKE '%" + this.textBox1.Text + "%'"; // DataGridView に検索結果を反映 this.productsBindingSource.DataSource = this.northwindDataSet.Products; } else { // 元に戻す場合 this.northwindDataSet.Products.DefaultView.RowFilter = ""; } }
TextBox に検索する文字列を入力して Button をクリックすれば検索結果が表示されるはずです。例えば "ch" という文字で検索すると、ProductName に "ch" という文字を含むレコードが表示されます。
- 編集済み SurferOnWww 2021年2月22日 7:14 画像追加
- 回答としてマーク mexicanafro 2021年2月22日 9:42
-
> もう1点教えて頂きたいのですが、DataGridViewのレコードをBindingNavigetorコントロールは使わず、再検索ボタン等を押して更新した場合、データベースから最新情報を再検索するような場合も、DataSourceを使って行うんでしょうか。
何がしたいのか分かりません。ここに書いてあること以外は知る由もない第三者が読んで、余計な想像ベースで答えなくて済むよう、全体的なストーリー・シナリオから始めて、分かるように書いてください。
- 編集済み SurferOnWww 2021年2月22日 11:21