DataTable->Select結果がDataGridViewに反映されない

解決


powerball2602  2009-08-31 11:09:02  No: 70842

public: System::Void SelectHashList(){
        try{
          System::String^ str = "";
          //検索キーワード
          HashListGrid->DataSource = gFC->HashSource;
          if(tbSearchFileKey->Text != ""){
            str = " HS_PKEY Like '*" + tbSearchFileKey->Text + "*'";
          }
          //HashKey
          if(tbSearchHashKey->Text != ""){
            str = " HS_FNAME Like '*" + tbSearchHashKey->Text + "*'";
          }
          //ファイルサイズ
          if(tbFileSize->Text != ""){
            str = " HS_SIZE  >= " + tbFileSize->Text;
          }
          if((tbSearchFileKey->Text == "") &&
            (tbSearchHashKey->Text == "") &&
            (tbFileSize->Text == "")){
            HashListGrid->DataSource = gFC->HashSource;
          }else{
            array<DataRow^>^ row = gFC->HashSource->Select(str);
            HashListGrid->DataSource = row;
          }
        }catch(Exception^ e){
          _pl(LOG_ERROR,"SelectHashList() エラー Exception =" +e->Message);
        }
      }

ファイルのハッシュ(MD5)リストを検索する処理を作っています。
ご質問させていただきたいのは、DataTableに入っているハッシュリストを、

  検索キーワード(ファイル名)
  ハッシュキー
  ファイルサイズ

の条件で検索しようとしています。
検索させてDataGridViewに反映させようとしているのですが、
ブレークポイントを入れてソース内のrowをみると、

  検索キーワードやHashKeyで検索してもrowが0件になる。
  ファイルサイズで検索すると、取得できているがDataGridViewの表示が
  値の入っていない空白のセルになる。

になります。

アドバイスをいただきたいのは

  検索キーワードやHashKeyでレコードがとれないのは、Likeの使い方が原因でしょうか。
  ファイルサイズで検索するとDataGridViewの表示がおかしくなるのはなぜでしょうか。

ちなみに、DataTableの
HS_PKEY、HS_FNAMEのDataTypeはSystem.String
HS_SIZEはSystem.UInt64です

環境は
Windows Vista HomePremium 64bit
Visual C++ 2008 ExpressEdiotnです。

よろしくお願いします。


subaru  2009-09-01 00:33:42  No: 70843

条件の文字列が意図したとおりに作成されているか確認できていますか?
構文はこちらで確認できます。
http://msdn.microsoft.com/ja-jp/library/system.data.datacolumn.expression(VS.80).aspx

フィルタ処理したいだけなら DataView を作成して RowFilter を設定するだけで十分です。


powerball2602  2009-09-03 07:18:56  No: 70844

subaruさんアドバイスありがとうございました。
RowFilterを使うことで実装できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加