- PR -

DataGrid の表示形式の設定について

投稿者投稿内容
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 13:38
現在、DataGridのテンプレート列に、以下のような設定をしています。

Text='<%# databinder.eval(container.dataitem,"startymd","{0:####/##/##}") %>'

ただし、これだと「startymd」のデータが空だった場合、「//」だけ表示されてしまいますので、データが入っている時だけ表示させたいと考えております。

単純にIF文で切り分ければいいのかな、とも思うのですが、<%# %>内にどうやってIF文を書いたらいいのか分からなくて(^^;)

ご協力をお願い致します。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-03-10 14:21
{0:カスタム数値書式指定文字列;;}
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 15:09
引用:

todoさんの書き込み (2006-03-10 14:21) より:
{0:カスタム数値書式指定文字列;;}


todoさん、お返事ありがとうございました。

数値形式の場合は、教えていただいたオーバーロード方式でいけそうですね。勉強になりました。

ところで、過去スレでこの方式だと数値項目しかダメということでしたので、VARCHARで保持している日付を数値型にキャスト(SELECT時に)して表示しているのですが、何とかVARCHARの項目のままSELECTして、表示時に日付形式<yyyy/MM/dd>に変換することは出来ないのでしょうか?

[ メッセージ編集済み 編集者: ひろれい 編集日時 2006-03-10 15:10 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 15:15
引用:

ひろれいさんの書き込み (2006-03-10 15:09) より:

ところで、過去スレでこの方式だと数値項目しかダメということでしたので、VARCHARで保持している日付を数値型にキャスト(SELECT時に)して表示しているのですが、何とかVARCHARの項目のままSELECTして、表示時に日付形式<yyyy/MM/dd>に変換することは出来ないのでしょうか?


できないですね。
数値しか入らないのであれば、Database 側でもそのような型にすべきだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 15:24
コード:
Text='<%# String.Format( "{0:####/##/##}", Int32.Parse( databinder.eval( container.dataitem, "startymd" ) ) ) %>' 


こんなのできるかな?試してみて下さい。
_________________
囚人のジレンマな日々
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 15:47
引用:

囚人さんの書き込み (2006-03-10 15:24) より:
コード:

Text='<%# String.Format( "{0:####/##/##}", Int32.Parse( databinder.eval( container.dataitem, "startymd" ) ) ) %>'


こんなのできるかな?試してみて下さい。




囚人さん、じゃんぬさん、お返事ありがとうございます。

数値形式で設定して、todoさん方式でゼロの場合は表示しない、と。確かに、それが1番安全なのかもしれないですね。しかし、ユーザ側の規則で「日付は文字列型」という規則がありまして(^^;)

囚人さん、残念ながら、ダメでした・・・

−−−−−−−−−− 以下、エラー内容 −−−−−−−−−−
入力文字列の形式が正しくありません。
説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.FormatException: 入力文字列の形式が正しくありません。

ソース エラー:

行 108: <HeaderStyle Width="10%"></HeaderStyle>
行 109: <ItemTemplate>
行 110: <asp:Label id="lblDbStartYmd" runat="server" Text='<%# String.Format("{0:####/##/##}", Int32.Parse( databinder.eval( container.dataitem, "startymd"))) %>'>
行 111: </asp:Label>
行 112: </ItemTemplate>

ソース ファイル : D:\Test.aspx 行 : 110

スタック トレース:

[FormatException: 入力文字列の形式が正しくありません。]
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +0
System.Int32.Parse(String s) +38
ASP.Test_aspx.__DataBind__control58(Object sender, EventArgs e) in D:\Test.aspx:110
System.Web.UI.Control.OnDataBinding(EventArgs e)
System.Web.UI.Control.DataBind()
System.Web.UI.Control.DataBind()
System.Web.UI.Control.DataBind()
System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource)
System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource)
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e)
System.Web.UI.WebControls.BaseDataList.DataBind()
TMT_test._Chinryo.btnSelect_Click(Object sender, EventArgs e) in D:\Test.aspx.vb:184
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()


[ メッセージ編集済み 編集者: ひろれい 編集日時 2006-03-10 15:51 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 15:58
startymd には必ず数値が入っていないと駄目ですね。
そういえば最初の投稿で空文字が入る可能性があると仰っていましたね。すみません。

コード:
Text='<%# databinder.eval( container.dataitem, "startymd" ) != String.Empty ? String.Format( "{0:####/##/##}", Int32.Parse( databinder.eval( container.dataitem, "startymd" ) ) ) : String.Empty %>'


こんなのできるかな?
_________________
囚人のジレンマな日々
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 16:08
引用:

ユーザ側の規則で「日付は文字列型」という規則がありまして(^^;)


こういう事をすると、その日付が入る箇所が必ず数字のみの文字列が入らないといけません。
「日付は文字列型」と「数値で扱いたい」が喧嘩しているからです。

もう一つ
コード:
Text='<%# databinder.eval( container.dataitem, "startymd" ) != String.Empty ? DateTime.Parse( databinder.eval( container.dataitem, "startymd" ) ).ToString( "yyyy/MM/dd" ) : String.Empty %>


こうかな。

startymd はどう入っているのでしょう。"20060101"とか?"180101"とか?キチッと日付が分からんような気がしますね。


_________________
囚人のジレンマな日々

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