我有一个带有包含 DateTime 列的 boundfield 的 gridview。在 OnRowDataBound 事件中,我检查该日期是否为 NOT NULL,并根据结果执行一些操作。
if (!String.IsNullOrEmpty(e.Row.Cells[16].ToString()))
但是,即使单元格为 NULL - 它是否为空,日期将显示为 1.1.1900 - 条件始终满足!
我做了一些解决方法用''(空)替换空值,因此将条件更改为
if (!e.Row.Cells[16].Text != "01/01/1900 0:00:00")
这行得通,但是我在gridview中显示了所有这些不相关的数据。
怎么了?
我被要求澄清未来可能踩到此线程的用户的问题:
假设你有这个 SQL 查询:
select getdate() as date
union all
select NULL
返回的数据是:
2015-12-22 12:58:37.650
NULL
如果您在 gridview 中显示此数据并在 OnRowDataBound 事件中检查其值,那么您会遇到我遇到的问题:为了找到那些没有 NULL 条目的行,您不能这样做:
if(e.Row.Cells[12].Text != null)
这没用。在这种情况下,gridview 单元格中显示的“无”有 6 个字符(不要问我为什么 - 这是纯粹的经验),因此可以通过
if(e.Row.Cells[12].Text.Length != 6)
我在我的解决方案中实现了这一点,但现在写这篇文章时,我得出的结论是,只需在 SQL 联合表达式中指定正确的默认日期(“1900-01-01”),就可以避免这一切。实际上,我认为我在 SQL 中踩到了一些不连贯的东西。在上面的查询中不应返回 NULL,因为列的类型肯定是日期时间。希望现在每个人都能接受这个评论。马丁