人会不会在同一个地方跌倒两次?答案是肯定的。当我终于找到原因后,隐约想起似乎曾经在很久以前遇到过同样的问题,从而也有了这个结论。
昨天,应用户的要求,将显示的数据格式化为带有千位分隔符的金额形式。这些数据我是用GridView来呈现的,所以,点击GridView右上角的小三角符号,会弹出一个GridView任务菜单,然后点击“编辑列”链接,就会打开一个字段编辑窗口,选中要编辑的字段,有一个“DataFormatString”属性,将其设置为{0:N},当然,还需要找到HtmlEncode属性,将其设置为False,最后点“确定”。如果不出意外的话,页面上相应的字段就会显示成用户要求的样子了。在这一瞬间,我甚至都不打算测试一下了,因为,结果都在意料之中,还有什么好试的呢?但是,做为程序员的习惯,加之VS2005的便利,我还是点了一下三角按钮。结果很快就出来了,只是,和我想像的不太一样,相应的字段并没有被格式化,而依然是原样显示的。我简直不敢相信自己的眼睛,赶紧检查是不是设错了字段呢?结果当然是没有问题。我不断地尝试,甚至怀疑是VS出错,但同一个项目中的其它页面又是正常的。真是百思不得其解!
只好开始检查数据源,我发现正常显示的数据来源于数据库的直接查询结果,而无法正常显示的数据,绑定的表是我在程序中生成的。那么是不是和这点有关呢?程序生成的表数据不能被格式化?这显然不能成立!但我还是参考了以前写的程序,都是没有问题的。这时,脑海里已经渐渐地出现了一些记忆,隐隐已经感觉到曾经在同一个地方跌过跟头了。找到表的定义,发现这些字段的类型都定义为String,而数据表中的定义是Decimal类型。我想:这就应该是问题所在了。将它们的类型改为Decimal,果然,想要的结果出来了!在程序中定义表结构的时候,为了图省事,没想到却在这里造成了麻烦。
以前,我一定遇到过同样的问题,但却“好了伤疤忘了痛”,在同一个地方又摔了一次。还好,现在有博客,随时把工作中的问题记录下来,一来总结经验,加深认识,二来为自己以后的工作做个参考,三来也为别人提供一些借鉴。