RowFilter で日時を条件に DataView から行選択・・・でハマった(^^;[お仕事]
(2014-09-03 22:00:08) by shinoda


VB.NET の話。

最終的にソートをしたいので、DataSet から

Dim dv As DataView = ds.hoge_table.DefaultView

という具合に DataView を作成し、その中からある日時のデータ(行)だけ抜き出そうとした。
抜き出した後にソートしたいわけね。

具体的には、send_time というカラムに 2014/09/03 17:51:29 と入っている行を抜く。

そこで、

dv.RowFilter = "send_time=#" & hoge_time & "#"

としてみたが、抜き出した行数 0 なのである。(hoge_time 変数には 2014/09/03 17:51:29 という時間が DateTime 型で格納されている)

イミディエイトウィンドウで RowFilter の内容と、データを(試しに200件目のデータを)確認すると、

?dv.RowFilter.ToString
"send_time=#2014/09/03 17:51:29#"
?ds.hoge(200)(68).ToString
"2014/09/03 17:51:29"

と、どっちも 2014/09/03 17:51:29 やないけ!!?
なんで抜けんの?

・・・と少々ハマったが、どうやら DataSet に入っている日時はミリ秒まで格納されているらしい。
ToString では表示されないけど。

なので、秒までの時間でマッチングさせようとすると、

dv.RowFilter = "send_time >= #" & hoge_time.ToString & ".00000# Or send_time <= #" & hoge_time.ToString & ".99999#"

としないといけないようだ。
これで、RowFilter は、

?dv.RowFilter.ToString
"send_time >= #2014/09/03 17:51:29.00000# Or send_time <= #2014/09/03 17:51:29.99999#"

こうなって、無事マッチングした行が抜き出せたのである。

面倒くせぇ〜!!(^^;

なんか、他に方法があるのかもしれないが、結局見つけ出せず。
「もっとスマートな方法があるぜ!」という .NET マスターは、ぜひここにコメントを!(笑)

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8