2010-12-08 80 views
0

VB.netでのfilterメソッドを使用して、検索ボックスのテキストに基づくDataGridViewで結果をフィルタリングしています。しかし、この検索の考え方は、のいずれかのにテキストが含まれていると行が表示されるということです。だから私のフィルタ文字列はこのように見える終わる:vb.net bindingsourceフィルタの日付を文字列にキャスト

filter = "ProductId LIKE '%" & searchterm & "%'" & " OR ScanDate like '%" & searchterm & "%'" 

をしかし、私はフィルタ特性にフィルタを入れしようとすると、それは比較のためのテキストに日付列を変換することはできませんと言って、文句を言います。

datetimeセルを文字列にキャストするようフィルタに指示する方法はありますか?

データセットに日付のキャストされたバージョンを含む非表示の列があり、フィルタにの列をフィルタするように指示します。

ここに私の割り当てのコードは次のとおりです。

bindingSource.Filter = filter 
dgv.DataSource = bindingSource.DataSource 

答えて

2

は、私はそれを得た、とそれは

bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert(ScanDate, 'System.String') LIKE '%" & searchterm & "%'" 
0

あなたのフィルタコードを打破する必要があります。したがって、フィルタコードをすべて1行に設定するのではなく、有効なDateTimeかどうかを確認するために、searchtermのテストを実行します。あなたがDateTimeのようなProductIdを持つとは思わないので、それに応じてフィルタを変更することができます。

try 
{ 
    string dt = DateTime.Parse(searchterm).ToString(); 
    filter = "ScanDate like '%" & searchterm & "%'" 
} 
catch 
{ 
    filter = "ProductId LIKE '%" & searchterm & "%'" 
} 

申し訳ありませんがC#コードですが、VB.Netに変換するのは簡単です。

+0

それはC#のもので問題はないと動作し、これは、実用的であるが、それはキーストロークごとにフィルタリングし、商品コードは、このPRD1234567のように見えるので、彼らは入力した場合"23" 23インチの商品ID、または23日などのスキャン日を示すことができます: "23/01/2010 12:00:00" – CrazyPenguin

+0

23歳になると、 23日目、23分目、23日目も、昼間の検索だけではありません。これを有効にするには、有効な日付形式にするために、DateTimeをパディングする必要があります。 DD/MM/YYYY hh:MM:SSでなければならないフォーマットに対して23を検索することはできません。 –

+0

それは私がしたいことです。それ自身の上に23を入力すると、productidが23の行が返されます。また、datetimeのいずれかのアスペクトに23が入っています(「23/01/2010 12:00:00」や「10/01/2023 12:00:00 "、または" 10/01/2010 12:23:00 "と表示されます。フィルタ自体の文字列に列をキャストできれば、期待どおりに動作します。どのようにするかわからない。 – CrazyPenguin