4

10 進数値にバインドされた BoundField を持つ ASP.NET Gridview があります。次のコードを使用して、10 進数を通貨値にフォーマットします。

DataFormatString="{0:C}"

ただし、NumberFormatInfo のカスタム実装があります。これにより、通貨記号が削除され、3 桁ごとの区切り記号が変更されます。通常、この形式は次のように適用されます。

myDecimal.ToString("C", myCustomNFI);

Gridview の BoundField 要素でカスタム NumberFormatInfo を指定するにはどうすればよいですか?

ありがとう

4

3 に答える 3

9

これは、カスタム バインド フィールドを使用して行うことができます。カスタム 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() 内で遊んでみることをお勧めします。

いくつかのコメント:

  • カスタム BoundField で複数のフォーマットを処理する場合は、base.DataFormatString を解析してフォーマット タイプを取得します。つまり、コード フロントに {0:NFI} または {0:NFI2} を指定すると、FormatDataValue 内でこれに対応すると、異なる形式になる可能性があります。

  • すべての書式設定ロジックを FormatDataValue 関数内に直接配置するのではなく、独自の書式プロバイダーを作成することを検討することをお勧めします。

このアプローチは、うまく機能するはずです。幸運を祈ります。

于 2009-07-09T22:06:20.733 に答える
4

field.DataFormatString = currencySymbol + " {0:#,###.##}";で試してください。

それは私にとってはうまくいきます。

于 2011-05-25T07:35:49.063 に答える
0

100%確実ではありませんが、できないと思います。

カスタム フォーマッタを使用する代わりに、テンプレート フィールドを使用して RowDataBound のリテラルにバインドする必要があります。しかし、間違っていることが証明されてうれしいです....

于 2009-07-09T13:09:28.730 に答える