- PR -

DataViewのRowFilterを使用したフィルタ機能

1
投稿者投稿内容
nao
会議室デビュー日: 2005/06/27
投稿数: 6
投稿日時: 2005-08-25 11:40
現在、DataViewのRowFilterを使用したフィルタ機能の実装を
行おうとしているのですが、DataViewのタイプがDateTime型だと
Like処理を行えず、エラーとなります。
※処理は以下になります。
DataViewの中がString型だと問題ないのですが、.netの仕様上
DateTime型でのLike検索は不可能なのでしょうか?
ご存知のかた、ご教授お願いします。

FileInfo[] fi = new FileInfo[3];
DataTable dt = new DataTable();
DataRow dr;

dt.Columns.Add(new DataColumn("date", typeof(DateTime)));
for (int i = 0; i < fi.Length; i++)
{
dr = dt.NewRow();
dr[0] = DateTime.Now;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
dv.RowFilter = "date LIKE '*#/08/25#'";

dataGrid1.DataSource=dv;
いげ太
常連さん
会議室デビュー日: 2004/10/27
投稿数: 32
投稿日時: 2005-08-25 14:21
LIKE は文字列比較なんで DateTime 型には使えません。
じゃあどうするか。
String に変換して LIKE すればいい。

コード:

// なぜか LIKE '%/08/25' だと引っかからなかった。。。
dv.RowFilter = "Convert(date, 'System.String') LIKE '%/08/25%'"

// これでもOK
// dv.RowFilter = "SUBSTRING(CONVERT(date, 'System.String'), 6, 5) = '08/25'";




【参考】
DataColumn.Expression プロパティ

[ メッセージ編集済み 編集者: いげ太 編集日時 2005-08-25 14:22 ]
[ メッセージ編集済み 編集者: いげ太 編集日時 2005-08-25 14:27 ]

[ メッセージ編集済み 編集者: いげ太 編集日時 2005-08-25 18:20 ]
nao
会議室デビュー日: 2005/06/27
投稿数: 6
投稿日時: 2005-08-25 17:25
いげ太さん回答ありがとうございます。

>LIKE は文字列比較なんで DateTime 型には使えません。
そうですか。

>じゃあどうするか。
>String に変換して LIKE すればいい。
やはりDataViewをString型に変更して対応するしかないんですね。

また色々試してみます。
ありがとうございました。

いげ太
常連さん
会議室デビュー日: 2004/10/27
投稿数: 32
投稿日時: 2005-08-25 18:12
少し言葉足らずでした。
意味を取り違えられているかもしれないので補足します。
# そうでなかったらごめんなさい

まず DataView は動的なビューでしかなくデータは持っていません。
データを持っているのは DataTable です。
DataView は DataTable の見え方を定義しているに過ぎないのです。

これをふまえて、

>やはりDataViewをString型に変更して対応するしかないんですね。

この文からは、
DateTime 型のデータを LIKE でフィルタしたいときは
データを String 型に変換して DataTable に突っ込まないといけない、
という風に読み取れますがそうではないです。

DataTable に格納するデータはあくまで DateTime 型で、
フィルタをかけるときに DateTime 型から String 型に変換して
LIKE しているのです。
1

スキルアップ/キャリアアップ(JOB@IT)