DataFormatString のカスタム NumberFormatInfo
-
12-09-2019 - |
質問
10 進数値にバインドされた BoundField を持つ ASP.NET Gridview があります。次のコードを使用して、10 進数を通貨値にフォーマットします。
DataFormatString="{0:C}"
ただし、NumberFormatInfo のカスタム実装があり、通貨記号が削除され、桁区切り文字が変更されます。通常、この形式は次のように適用されます。
myDecimal.ToString("C", myCustomNFI);
Gridview の BoundField 要素にカスタム NumberFormatInfo を指定するにはどうすればよいですか?
ありがとう
解決
これは、カスタム バインド フィールドを使用して実行できます。カスタム BoundField クラスから始めます。以下では、命名規則に従ってみました。
namespace CustomBoundField
{
public class NFIBoundField : System.Web.UI.WebControls.BoundField
{
protected override string FormatDataValue(object dataValue, bool encode)
{
if (dataValue == null || dataValue == System.DBNull.Value)
return "";
if (base.DataFormatString == string.Empty)
return dataValue.ToString();
// Format as you wish based on dataValue and DataFormatString argument
return string.Format("{0}", dataValue);
}
}
}
.ASPX ファイルにコントロールを登録します。
<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>
GridView 内でカスタム BoundField を参照します。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<custom:NFIBoundField DataField="Price" HeaderText="Price" DataFormatString="{0:NFI}"/>
</Columns>
</asp:GridView>
必要な書式設定を取得するには、FormatDataValue() 内をいじってみるとよいでしょう。
いくつかのコメント:
カスタムバウンドフィールドに複数の形式を処理したい場合は、base.dataformatstringを解析して、フォーマットタイプを取得します。要するにあの {0:NFI} または {0:NFI2} を code-front は、異なる結果をもたらす可能性があります formatsは、FormatDataValue内でこれに対応する場合です。
FormatDataValue関数の内側にすべてのフォーマットロジックを配置するのではなく、独自のフォーマットプロバイダーの作成を検討することをお勧めします。
このアプローチは問題なく機能するはずです。幸運を祈ります。
他のヒント
としてみてくださいのfield.DataFormatString =たcurrencySymbol + "{0:#、### ##}"; の
これは私のために正常に動作します。
私は100%確実ではないが、私はあなたができるとは思わない。
あなたはRowDataBoundではなく、カスタムフォーマッタを使用してリテラルにテンプレートフィールドを使用してバインドする必要があります。
....しかし間違って証明されて幸せ