- PR -

DataGrid の表示形式を指定する方法について

投稿者投稿内容
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-08-14 10:50
いつもお世話になっております。なり と申します。
以下の環境でWeb アプリを作成しているのですが、DataGrid の表示形式について不明な点が出てきてしまい、質問させていただきたく、よろしくお願いします。
(もし、Database Expert 板にいくべし!であれば、そのようにご指摘ください)

■環境
Windows Server 2003 + .NET Framework 2.0 + Vitual Web Developer 2005 Express
MS SQL Server 2000 SP4a

■やりたいこと
データベースに datetime 型で保存されているデータを、DataGrid 上でmm/dd 形式で表示したい。

調べてみたところ、MySQL では Date_format を使用して、データベースの Select 時に形式を指定できるようなのですが、今まで調べてみたところ、MS SQL には使えないようで、
・MS SQL で形式を指定しての Select ができないか
・Datagrid の設定で表示形式を指定できないか
の観点で調べていますが、いまだ情報が見つからない状態です。

注意点としては、データベースの datetime は、DBNULL の場合があるという点です。

上記の方法について、ヒントをいただければと思いますので、よろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-14 12:00
SELECT したときに .NET の DateTime 型の変数に値を入れて、いざ UI で表示する時に、DateTime 型に書式指定出力(ToString() メソッドで可能)させればよいです。

DBNull の場合があるということなので、厳密には Nullable の DateTime 型になるか、DataSet を UI まで持ち運んでいるならば、出力する時に DBNull チェックです。
_________________
囚人のジレンマな日々
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-08-14 13:31
囚人さん

早速のお返事ありがとうございます。

すみませんが、理解しきれていないので、追加で教えていただいてもよろしいでしょうか。

引用:

囚人さんの書き込み (2006-08-14 12:00) より:
SELECT したときに .NET の DateTime 型の変数に値を入れて、いざ UI で表示する時に、DateTime 型に書式指定出力(ToString() メソッドで可能)させればよいです。

DBNull の場合があるということなので、厳密には Nullable の DateTime 型になるか、DataSet を UI まで持ち運んでいるならば、出力する時に DBNull チェックです。




現在、DataGrid への表示は、次のようなコードで行っています。
変数に代入する方法は分かりますが、DataGrid に表示させる場合に、どう設定したら表示できるのか、ご教示いただけませんでしょうか。

■コード
Dim cn_list As New SqlConnection
cn_list.ConnectionString = "Data source=localhost; Initial Catalog=support;Trusted_Connection=false;User ID=sa;Password=password;"

Dim cmd_list As New SqlCommand
cmd_list.CommandText = "select a, b, c from list where a='xxx' order by a"
cmd_list.Connection = cn_list

cn_list.Open()

Dim rdr As SqlDataReader = cmd_list.ExecuteReader
=囚人さんからのアドバイス追加分========================
dim tmp_b as datetime
If not ISDBNUKK(rdr("b")) then
tmp_b = rdr("b")
end if
=========================

Me.list_xxx.DataSource = rdr
Me.list_xxx.DataBind()

rdr.Close()
cn_list.Close()

eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2006-08-14 15:29

>・Datagrid の設定で表示形式を指定できないか
囚人さんのはこちらの方法ですが

>・MS SQL で形式を指定しての Select ができないか
表示に使うだけであればこちらの方法でもできます。

select right(convert(varchar,日付,111),5) from テーブル名

一応mm/ddの形になるはずです。
DBNullだった場合は値はそのままですので
IsNullで変換するか表示前にDBNullチェックしてください。
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-08-15 14:13
eterniaさん

ご返答ありがとうございます。
早速試してみたところ、希望の表示形式になりました。
ありがとうございました。

今後同じようなことを伺うのも申し訳ないので、もし可能ならご教示いただきたいのですが、111 や 5 が変換の形式を指定しているかと思いますが、こういった情報はどのようなキーワードで調べればよいか、ご教示いただけませんでしょうか。

お忙しい中とは存じますが、よろしくお願いします。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-08-15 14:58
こんにちは。

eternia さんではありませんが…

引用:

なりさんの書き込み (2006-08-15 14:13) より:

今後同じようなことを伺うのも申し訳ないので、もし可能ならご教示いただきたいのですが、111 や 5 が変換の形式を指定しているかと思いますが、こういった情報はどのようなキーワードで調べればよいか、ご教示いただけませんでしょうか。


111 は変換の形式をあらわしていますが、 5 は right の引数なので「右
端から 5 文字取り出してよ」という意味ですね。
111 は convert 関数の引数で、yyyy/mm/dd 形式に変換させるための
フォーマット値です。

で、どういったキーワードで調べればよいか、ですが。
111 の値自体は、MSDN で convert 関数を調べてもらえればなんとか
たどり着けそうな気がしますが、それにはまず convert に行き着く必要が
ありますね。
私の場合は他の DBMS で使われている format や TO_CHAR などの語
句を頼りに Google 先生に聞き倒しました。あとは「SQL Server 日付」や
「SQL Server 変換」とかなんとか。

Google 先生でなくとも Yahoo! 教授でも MSDN 大統領でもなんでもい
いわけですが、一つの語句から関連付けて次々調べていくというのはいいか
もしれません。
検索するときのコツとして「自分ならこの語句をどういった文章で書くか」を意
識するのがいいんじゃないでしょうか。検索で該当するページは基本的には
誰かが書いた文章だったりするわけで、語句だけで検索するよりは「〜とは」
とか文章仕立てで検索してみるのもいいかもしれませんね(MSDN 除く)。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-08-15 15:09
NAL-6295です。

既に他の手段で解決済みのようですが、

引用:

・Datagrid の設定で表示形式を指定できないか



バインド列でしたら、

{0:MM/dd}で可能だったと思います。
eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2006-08-15 15:11

とりあえず[SQLServer 書式 変換 日付]等のキーワードで
何を使えば実現できるか(今回はconvert関数)までは辿りつけるかと思います。
それさえわかれば後はmsdn等で調べられますよね?

あと、わからない言葉が出てきたらそれをキーワードに検索する癖をつけときましょう。
(囚人さんへの返信もToString()メソッドを調べればすぐわかったはずです)

大抵キーワードは調べたいジャンル+やりたいことで検索しています。
もう少し効率のいい検索方法があるかもしれませんが自分はこんな感じです。

#どうして希望の形式になるのかは調べて理解しておいてくださいね^^;
#それと、囚人さんのやり方でもできるようになっておいたほうがいいです。

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