質問

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ではなく、カスタムフォーマッタを使用してリテラルにテンプレートフィールドを使用してバインドする必要があります。

....しかし間違って証明されて幸せ
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top