- PR -

GridViewフォーマットについて

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-06 14:41
あ、失礼、TemplateFieldなのですね。だとHtmlEncodeは関係なさそうです(というかプロパティがない)。

引用:
.NETでもyyyy/mm/ddで表示されてしまいます。

デューンさんがおっしゃってるのは小文字じゃなくて大文字が正しいということでしょう。
小文字だと月じゃなくて分になってしまいます。
あと「.NETでも」の意味がよくわかりません。
で「yyyy/mm/ddで表示されてしまいます」って、それが希望じゃなかったですか?
ムラ
ベテラン
会議室デビュー日: 2008/12/19
投稿数: 51
投稿日時: 2009-03-06 14:52
間違えました。

引用:
-------------------------------------------------------------------------------

.NETでもyyyy/mm/ddで表示されてしまいます。
-------------------------------------------------------------------------------

「yyyy/mm/dd」形式じゃなくて「yyyy/mm/dd 0:00:00」形式で表示されてしまいます。

申し訳ありません。

mmを大文字の「yyyy/MM/dd」形式にしても駄目でした…
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-06 14:57
「yyyy/MM/dd」については、べるさんに補足して頂いたとおりです。



VWD2008 Express Edition
ASP.NET Webサイト(C#)
SQL Server 2008では、

DB上、date型の列でもdatetime型の列でも

コード:
    DataSet ds = new DataSet();
    SqlDataAdapter ad = new SqlDataAdapter();
    ad.SelectCommand = com;
    ad.Fill(ds);

    GridView2.DataSource = ds.Tables[0];
    GridView2.DataBind();


コード:
<asp:TemplateField>
    <ItemTemplate>
        <asp:TextBox ID="TextBox" runat="server" Text='<%# Bind("date_column_name", "{0:yyyy/MM/dd}") %>' Width="65px" />
    </ItemTemplate>
</asp:TemplateField>


というようなコードで正常に表示できました。


ただし、Bindしているものの実体が"2009/01/01 00:00:00"というような文字だったと書式文字列が無視されます。
実体と言っているのはDB上で文字型列であったり、
DataTableを使用している場合であればDataColumnがStringだったりした場合です。


ムラ
ベテラン
会議室デビュー日: 2008/12/19
投稿数: 51
投稿日時: 2009-03-06 15:31
引用:
-------------------------------------------------------------------------------
ただし、Bindしているものの実体が"2009/01/01 00:00:00"というような文字だったと書式文字列が無視されます。
実体と言っているのはDB上で文字型列であったり、
DataTableを使用している場合であればDataColumnがStringだったりした場合です。
-------------------------------------------------------------------------------

上の引用から、「yyyy/MM/dd 0:00:00」形式でデータベースに登録されている時点でフォーマットはされないということと判断しました。

型を文字列型にして、試してみたのですが、やはり駄目でした。

ということはデータベース(SQLServer2005)にyyyy/mm/dd形式で登録しなければならないということなのでしょうか?

勘違いしていたら申し訳ありません。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-06 16:47
情報が断片的なので何とも言えませんが、

引用:

型を文字列型にして、試してみたのですが、やはり駄目でした。


とは列の型でいいですか?
くどいようですが今テーブルの列の型は何ですか?date, datetime, timestampとあると思いますがどれでしょうか。

SQLServer上のデータを確認したとき
Management Studioでは yyyy-mm-dd hh:mm:ss のフォーマットで表示されるような気がしていて、
そこが最初から引っかかっています。

引用:

データベース(SQLServer2005)にyyyy/mm/dd形式で登録しなければならないということなのでしょうか?


登録時は形式というより、DateTimeで登録できる値かどうか。という意識になると思います。
DB上dateで登録されていてもdatetimeで登録されていても、出力のタイミングで整形するために書式文字列が存在します。

[ メッセージ編集済み 編集者: デューン 編集日時 2009-03-06 16:48 ]
ムラ
ベテラン
会議室デビュー日: 2008/12/19
投稿数: 51
投稿日時: 2009-03-06 17:01
文字列型とは列の型のことです。

datetime型です。

Varchar型で試してみたのですが駄目でした。

@IT様のサンプルGridViewCustom.aspx(第何回のサンプルか忘れました。)は日付型がフォーマットされていました。

何か致命的なミスをしているような気がします。

GridViewCustom.aspxと見比べて原因を探っています。

サンプルは「第4回 テンプレート機能でGridViewコントロールも自由自在」でした。



[ メッセージ編集済み 編集者: ムラ 編集日時 2009-03-06 17:05 ]
ムラ
ベテラン
会議室デビュー日: 2008/12/19
投稿数: 51
投稿日時: 2009-03-06 19:40
解決しました。

フォーマットはうまくいかなかったので、

コントロールの左10文字抜き出すことでうまくいきました。

コード:
CType(GridView2.Row(1).FindControl("Label1"), String).Text = Left(CType(GridView2.Row(1).FindControl("Label1"), String).Text,10)

フォーマットがわからなかったため、完全な妥協ですが、
多くの御教授のお陰です。ありがとうございました。

[ メッセージ編集済み 編集者: ムラ 編集日時 2009-03-06 19:43 ]

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