GridView 中DataFormatString失效的原因
今天帮一位客户部署网站的时候,发现之前在本地调的好好的网站,竟然出现几处不一样,因为本地开发是VS 2010 环境,而客户空间跟域名买的配置跟本地环境有很多不一样;
其中一个问题是:GridView 中DataFormatString失效;
解决方案:
<ASP:GridView ID="grvResult" runat="server" AutoGenerateColumns="False" Width="100%">
<Columns>
<ASP:BoundField HeaderText="预定日期" DataField="OperationDate" DataFormatString="{0:yyyy-MM-dd}" HTMLEncode="False">
</ASP:BoundField>
<ASP:BoundField HeaderText="订单总计" DataField="TotalRate" DataFormatString="{0:C}" HTMLEncode="False">
</ASP:BoundField>
</Columns>
</ASP:GridView>
例如上面的代码展示了日期和货币两种绑定方式。DataFormatString中的{0}是固定的格式,这和String.Fromat(“{0}”, someString)中的{0}是一个用法,表示绑定上下文的参数索引编号。然后,在后面加入格式化字符串,具体的使用方法可以参考MSDN。
这里需要注意以下几点
1. 在GridView中的ASP:BoundField使用DataFormatString必须设置属性HTMLEncode="False",否则不起作用。
2. 如果需要使用日期类型的格式化字符串,必须数据实体中对应的字段也应该日起类型的。
3. 格式化字符串C代表货币单位,需要绑定的数据类型应该是数字类型的。如果是字符串类型的不起作用,需要手动添加格式化字符串为DataFormatString="¥{0:C}"。
总结:
GridView中使用DataFromatString与在DataGrid中使用起来有些不同的!在GridView中的BoundField新增了HTMLEncode 属性,且默认是true,这就使得DataFromatString失效!