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的主要内容,如果未能解决你的问题,请参考以下文章