【发布时间】:2015-12-09 12:59:26
【问题描述】:
我有一个带有包含 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 Union 表达式中指定正确的默认日期(“1900-01-01”)来避免.实际上,我认为我在 SQL 中踩到了一些不连贯的东西。在上面的查询中不应返回 NULL,因为列的类型肯定是日期时间。希望现在每个人都能接受这个评论。马丁
【问题讨论】:
-
如果它不是可以为空的日期时间,它将填写默认值
-
你的第二个 if 语句甚至不应该编译。
-
这似乎是一种非常奇怪的检查是否为空的方法:if (!String.IsNullOrEmpty(e.Row.Cells[16].ToString()))。使用 e.Row.Cells[16] != null 代替。无需将 needle 转换为字符串。
-
@Colm Prunty:它在哪里填写默认值?在 gridviews boundfield 中,那些为 NULL 的记录只是空的。
-
@M.kazem Akhgary:事实上它确实可以编译,看来我必须回到这个解决方法,因为这里没有说什么帮助我。
标签: c# sql if-statement rowdatabound