2010-12-16 5 views
2

私はGridViewの中ItemTemplateににこのコードを持っている:Asp.net grdiview:itemtemplateのデータ項目をフォーマットできますか?

<%# DataBinder.Eval (Container.DataItem, "DiscountAmount")%> 

それは小数点値だし、それは20.300000000000を示し、技術的に右であるが、私はに応じて、20.30または20,30を表示することを好むだろう文化。

しかし、私はgridviewsの大ファンではありませんでした。DataBinder.EvalContainer.DataItemはどちらも良い友達ではありませんでした。私はそれを使用する方法に迷っています。

それは特別なプレフィックス(<%#)を持っていると私はその後、元のコードを他の何かを入力すると、それは良いですが、<% =または<%に<%番号を変更するのいずれか動作するようには思えないのですか?

+0

[例との完全なソリューションは、ここを参照してください](http://www.codeshower.blogspot.in/2012/10/datetime-format-in-gridview.html) –

答えて

3

は、これも動作します:

<%#= String.Format("{0, 0:N2}",DataBinder.Eval (Container.DataItem, "DiscountAmount"))%> 

編集:私は、宣言型のデータバインディング構文を使用して不快感を共有しています。 のコードビハインドで同じことを達成するには、RowDataBoundイベントを呼び出し、データがGridViewRowにバインドされるときに変更したいものを実装します。

<asp:GridView ID="InvoiceGrid" OnRowDataBound="InvoiceGrid_RowDataBound".....> 

が次にあなたが背後にあるコードでイベントハンドラを作成します。

これを行うには、あなたはあなたのイベントハンドラの名前、このような何かにOnRowDataBoundを設定することにより、マークアップイベントを配線する必要がありますこのような署名:

protected void InvoiceGrid_RowDataBound(object sender, GridViewRowEventArgs e) 

あなたはそのイベントハンドラで最初に行うことは、それがあるGridViewRow種類のタイプのテストです0

あなたは何をしたいのかを決める。

宣言的なマークアップに満足している人にとって、これは負担に思えるかもしれません。しかし、快適なコードを書いている人にとっては、コードの背後でもっと多くのことをここで行うことができます。

+0

して、電子メールでfindcontrolを使ってコントロールを取得します。 – Michel

+1

はい、FindControl、またはあなたが不正行為をしてe.Row.Cells [1] .Text = "some text"を行うことはできますが、列を変更するとそれが壊れます。これ以上のアイデアについては、http://authors.aspalliance.com/aspxtreme/sys/web/ui/webcontrols/GridViewClassRowDataBound.aspx – DOK

+0

のようにクライアント側のコード内に記述してください。 <%#String.Format( "{0、0:N2}"、DataBinder.Eval(Container.DataItem、 "COLUMN_NAME"))%> – M009

3

これを試しましたか?

<%= String.Format("{0:0,0.00}", DataBinder.Eval (Container.DataItem, "DiscountAmount"))%> 

か、単に

<%# DataBinder.Eval(Container.DataItem, "DiscountAmount", "{0:0,0.00}") 

あなたは記事String Format for Doubleでより多くのフォーマットオプションを読むことができます。

+0

また、これは動作するはずです: '<%#DataBi nder.Eval(Container.DataItem、 "DiscountAmount"、 "{0:0,0.00}")%> '(つまり、オーバーロードされた関数を呼び出します)。 –

+0

そして、cultureinfoでこれをどうすればできますか? – Michel

2

いくつかの方法があります。そのうちのいくつかは、上記で述べたと、ここで別のいずれかになります。

Text='<%# GetFormattedDiscount(Eval("DiscountAmount").ToString())%>' 

はGetFormattedDiscoutは、コードビハインドあなたが必要な書式を何でもして、それを文字列として返すことができる関数です:

protected void GetFormattedDiscount(string amount){ 
return String.Format("{0:N2}",amount); 
} 

がこれでも動作するはずです:

<ItemTemplate> 
<asp:Label ID="Label1" runat="server" Text='<%#String.Format("{0:n2}",Eval("DiscountAmount")) %>'></asp:Label> 
</ItemTemplate> 
関連する問題