DataFormatString上的自定义NumberFormatInfo

时间:2009-07-09 13:07:11

标签: asp.net datagridview number-formatting

我有一个带有BoundField的ASP.NET Gridview,它绑定到一个十进制值。我使用以下代码将十进制数格式化为货币值:

DataFormatString="{0:C}"

我们有一个NumberFormatInfo的自定义实现,它会删除货币符号并修改数千个分隔符。通常这种格式适用:

myDecimal.ToString("C", myCustomNFI);

如何在Gridview的BoundField元素上指定自定义NumberFormatInfo?

由于

3 个答案:

答案 0 :(得分: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内部 功能

这种方法应该对你有用。祝你好运。

答案 1 :(得分:3)

尝试 field.DataFormatString = currencySymbol +“{0:#,###。##}”;

它适用于我。

答案 2 :(得分:0)

我不是100%肯定,但我认为你不能。

您需要使用模板字段并使用自定义格式化程序绑定到RowDataBound上的文字。但是很高兴被证明是错误的......