DataGridはデータの一覧表示に便利なコントロールでよく使う。
その際、列の書式設定には通常ColumnStyleコレクションエディタを使うが、問題はあらかじめ決まったテーブルを表示するとき以外には全く利用価値がないことだ。
マスター参照用にマスターの数だけフォームを用意するのは、2・3個ならまだしも、それ以上はうんざりする。一つで汎用的に作るのが賢いプログラマである。
今回、その方法はSELECT文の書き方だけでできるのでとても簡単である。
サンプルはOracel(10g)のデータを使った。
書式の効果がわかりやすいように、日付・時刻はNUMBER型になっている。
1.普通の書き方とその表示画面はこうなる。
sSql = "SELECT " & _
"inputymd ""入力日""," & _
"inputhms ""時刻""," & _
"denpyono ""伝票No.""," & _
"jyucyuymd ""受注日付""," & _
"case denkbn when 0 then '売上' when 5 then '現金売上' else 'その他' end ""伝区"" ," & _
"tokuinm ""得意先""," & _
"gokei ""合計金額"" " & _
"FROM t_jyutyub_h " & _
"WHERE tantocd like '%" & para & "%' " & _
"AND jyucyuymd >= " & para2 & " " & _
"ORDER BY jyucyuymd DESC"
2.書式指定付きの書き方とその表示はこうなる。
sSql = "SELECT " & _
"
TO_CHAR(TO_DATE(inputymd,'YYYYMMDD'),'YYYY/MM/DD') ""入力日"", " & _
"
TO_CHAR(TO_DATE(TO_CHAR(inputhms,'FM000000'),'HH24MISS'),'HH24:MI:SS') ""時刻"", " & _
"denpyono ""伝票No.""," & _
"
TO_CHAR(TO_DATE(jyucyuymd,'YYYYMMDD'),'YYYY/MM/DD') ""受注日付""," & _
"case denkbn when 0 then '売上' when 5 then '現金売上' else 'その他' end ""伝区"" ," & _
"tokuinm ""得意先""," & _
"
TO_CHAR(gokei,'9,999,999,990') ""合計金額"" " & _
"FROM t_jyutyub_h " & _
"WHERE tantocd like '%" & para & "%' " & _
"AND jyucyuymd >= " & para2 & " " & _
"ORDER BY jyucyuymd DESC"
数値型の日付(年月日)の書式指定は、日付型に変換(TO_DATE)後、さらに文字型(TO_CHAR)に変換している。
時刻の場合だと、5桁(90130=9時1分30秒)と6桁(101545=10時15分45秒)が混じるので、事前に文字型(FM修飾子付)に変換し、6桁に統一してから日付型に変換している。
合計金額の場合、最大桁数分のFormat書式を指定する。これが少ないと、Excelのように#で表示されてしまう。桁の無いところは[9]を指定すると空白が出力され、[0]を指定すると0が出力される。
posted by なっちゃん at 21:20| 静岡

|
Comment(0)
|
TrackBack(0)
|
VB.NET Tips
|

|