none
DataGridViewの再検索や条件検索はできますか。 RRS feed

  • 質問

  • 何度も同じ質問ですみません。

    以前、DataGridViewのComboBoxの選択肢を変更後、update()を実行しても更新されない件で質問した際、以下のリンクページを紹介頂きました。

    http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

    このページ通りにComboBoxを実装し、更新したところ、希望通り更新されました。

    ただ、このDataGridViewに対し、再検索や条件検索をする方法がわかりません。

    上記の事をする場合、リンクページのサンプルコードに対し、検索関係のコードを記述すれば動く物なのでしょうか。

    ※このメソッドを使えば~、このコードを利用すれば~等のヒント的な情報でも有難いです。

    正直、どう書けば条件検索できるか全然分からないため、ご協力頂ければ嬉しいです。

    以上、説明不足で申し訳ありませんが、どうぞよろしくお願いします。

    2021年2月22日 4:45

回答

  • 具体的にどのような検索をしたいのか不明ですが・・・

    例えば参考にしている記事の例で 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
    2021年2月22日 7:11

すべての返信

  • 具体的にどのような検索をしたいのか不明ですが・・・

    例えば参考にしている記事の例で 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
    2021年2月22日 7:11
  • 早速のご回答、ありがとうございます。

    こういう使い方があるんですね、大変勉強になりました。

    もう1点教えて頂きたいのですが、DataGridViewのレコードをBindingNavigetorコントロールは使わず、再検索ボタン等を押して更新した場合、データベースから最新情報を再検索するような場合も、DataSourceを使って行うんでしょうか。

    差し支えなければご回答、よろしくお願いします。

    2021年2月22日 9:42
  • もう1点教えて頂きたいのですが、DataGridViewのレコードをBindingNavigetorコントロールは使わず、再検索ボタン等を押して更新した場合、データベースから最新情報を再検索するような場合も、DataSourceを使って行うんでしょうか。

    何がしたいのか分かりません。ここに書いてあること以外は知る由もない第三者が読んで、余計な想像ベースで答えなくて済むよう、全体的なストーリー・シナリオから始めて、分かるように書いてください。



    2021年2月22日 11:20