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です。
よろしくお願いします。
条件の文字列が意図したとおりに作成されているか確認できていますか?
構文はこちらで確認できます。
http://msdn.microsoft.com/ja-jp/library/system.data.datacolumn.expression(VS.80).aspx
フィルタ処理したいだけなら DataView を作成して RowFilter を設定するだけで十分です。
subaruさんアドバイスありがとうございました。
RowFilterを使うことで実装できました。
ツイート | ![]() |