DataFormatString 上的自定义 NumberFormatInfo

Posted

技术标签:

【中文标题】DataFormatString 上的自定义 NumberFormatInfo【英文标题】:Custom NumberFormatInfo on DataFormatString 【发布时间】:2009-07-09 13:07:11 【问题描述】:

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

DataFormatString="0:C"

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

myDecimal.ToString("C", myCustomNFI);

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

谢谢

【问题讨论】:

【参考方案1】:

这可以使用自定义绑定字段来完成。从自定义 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() 内部进行操作以获得所需的格式。

几个cmets:

如果您希望自定义 BoundField 处理多种格式,解析 base.DataFormatString 来获取 格式化类型。换句话说, 提供 0:NFI 或 0:NFI2 在 代码前端可能会导致不同的 如果您在 FormatDataValue 中适应此格式,则为格式。

您可能需要考虑创建 您自己的格式提供程序,而不是 放置所有格式化逻辑 就在 FormatDataValue 内部 功能。

这种方法应该适合您。祝你好运。

【讨论】:

【参考方案2】:

试试 field.DataFormatString = currencySymbol + " 0:#,###.##";

对我来说很好用。

【讨论】:

【参考方案3】:

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

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

【讨论】:

说实话,我已经这样做了,因为我找不到任何其他方法来做到这一点。覆盖 CurrentCulture 的 NumberFormatInfo 应该可以工作,但这是只读的,所以我也放弃了这列火车。还有其他人有意见吗?

以上是关于DataFormatString 上的自定义 NumberFormatInfo的主要内容,如果未能解决你的问题,请参考以下文章

DataFormatString:字段必须是数字

日期时间的 DataFormatString

数据集中的 DataFormatString,按代码

NavigationDrawer 上的自定义字体

resignFirstResponder 无法关闭我在 iPad 上的自定义键盘。为啥?

iOS 上的自定义 UIPresentationController