none
DataView RowFilterの抽出キャンセル RRS feed

  • 質問

  •  

     お世話になります。

     

    DataViewについてご質問をさせていただきます。

     

    現在Windowsアプリケーションで

    DataGridView.DataSource = DataViewとして

    ユーザーに値の入力を行ってもらおうと考えております。

     

     

    列名A(String) | 列名B(int)

     AAA                     0

     BBB                     1

     CCC                     2

     

    ここで列名Bが<>0 の条件で抽出したいのですが

    抽出をしたいのは起動時の一回のみ抽出を行いたいのです。

     

    単純にフォーム起動時にDataView.RowFilter = "列名B <> 0"

    と記述するとDataGridViewの画面でBBBの数値1を→0に変更すると

    この変更分も自動的にRowFilterの抽出対象となってしまいます。

     

    要は入力内容の検証をユーザーが行いたいのでDataViewの

    値が変更するたびに抽出をするのではなく

    最初のデータ取得時だけデータを抽出したいのですが・・・。

     

    どなたか解決策を知っている方はいらっしゃいますか?

     

     

    2008年11月12日 9:37

回答

  • そのDataViewからToTableメソッドでデータテーブルを作成して、それをDataSourceに設定するのが一番簡単だと思いますが、DataGridViewで変更した内容を書き戻す必要があるなら、この手は使えません。その場合は、RowFilterを使わずにデータテーブルを作成する段階でレコードを絞らなけばなりません。例えばSQL文のwhere句の使用です。

    それも難しく、どうしてもRowFilterで絞りたいということであれば、絞るためのダミー列を作成すれば良いでしょう。

    例えば、select a, b, b as c from table としておき、cでRowFilterをかけます。実際に変更されるのはbですから、cは影響を受けません。

    2008年11月12日 12:07
    モデレータ

すべての返信

  • そのDataViewからToTableメソッドでデータテーブルを作成して、それをDataSourceに設定するのが一番簡単だと思いますが、DataGridViewで変更した内容を書き戻す必要があるなら、この手は使えません。その場合は、RowFilterを使わずにデータテーブルを作成する段階でレコードを絞らなけばなりません。例えばSQL文のwhere句の使用です。

    それも難しく、どうしてもRowFilterで絞りたいということであれば、絞るためのダミー列を作成すれば良いでしょう。

    例えば、select a, b, b as c from table としておき、cでRowFilterをかけます。実際に変更されるのはbですから、cは影響を受けません。

    2008年11月12日 12:07
    モデレータ
  •  

    ご返信ありがとうございました。

     

    抽出はユーザーにも解除できるようにと考えていたのでSQL分で

    抽出はどうしても避けなければいけない状態でしたので、このような

    質問をさせていただきました。

     

    RowFilterのイベントを補足してキャンセルなんかできないかなと

    考えていたのですが・・・。

     

    DataViewを使わずにDataTableでコレクションループを使用して

    行を非表示にするなども検討したのですが、コレクションループ

    のパフォーマンスが悪いので。。

     

    通常はやはり、ダミー列しかないのでしょうかね?

    2008年11月12日 14:42
  • こんにちは。中川俊輔 です。

     

    trapemiyaさん、回答ありがとうございます。

     

    さとさとさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、trapemiyaさんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

     

    2008年11月26日 6:45