asp.net - DataFormatString 上的自定义 NumberFormatInfo

标签 asp.net datagridview number-formatting

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

DataFormatString="{0:C}"

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

myDecimal.ToString("C", myCustomNFI);

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

谢谢

最佳答案

这可以使用自定义绑定(bind)字段来完成。从自定义 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 内部 功能。

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

关于asp.net - DataFormatString 上的自定义 NumberFormatInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103774/

相关文章:

asp.net - 如何使用 ASP.Net 将 Rtf 转换为文本?

c# - 如何删除 DataGridView 中的最后一行/页脚行?

c# - 编辑时回滚datagridview的旧值

es_US 的 Android NumberFormat.getCurrencyInstance 返回不正确的值

asp.net - 仅将样式应用于一个元素

.net - 如何对 . .NET 中的 resx(资源文件)

c# - 为什么 Visual Studio 的 MVC 模板在 View 中而不是在相应的 Controller 中设置 ViewBag.Title?

c# - 表,SQL C# 通过在 datagridview 中选择一行将数据添加到 "FK table"

c# - 将整数格式化为八进制

javascript - jsp中显示双数时如何防止 'E'?