使用!=比较GridView新旧值出现意外结果的原因咨询
问题原因及解决方法
核心原因
你用e.NewValues["Schedule"] != e.OldValues["Schedule"]做比较时,本质是引用类型的相等性检查——因为NewValues和OldValues存储的是装箱后的object实例,哪怕两个实例的DateTime值完全相同,只要是不同的对象实例,引用比较就会返回true。
解决步骤
把两个值先转换为DateTime类型,再做值比较:
修改后的代码示例
private bool UpdateWaiveItemShortShipCheckingPass(GridViewUpdateEventArgs e) { DateTime TargetReplenishmentSchedule; if (!DateTime.TryParse(TextBoxTargetReplenishmentSchedule.Text.Trim(), out TargetReplenishmentSchedule)) { ShowJavaScriptMessage("TextBoxTargetReplenishmentScheduleIsNotDate", "Target Replenishment Schedule is not a date!"); return false; } var oldScheduleObj = e.OldValues["Schedule"]; var newScheduleObj = e.NewValues["Schedule"]; if (oldScheduleObj != null && newScheduleObj != null) { // 转换为DateTime类型后做值比较 var oldSchedule = (DateTime)oldScheduleObj; var newSchedule = (DateTime)newScheduleObj; if (oldSchedule != newSchedule) { if (TargetReplenishmentSchedule.Date < DateTime.Now.Date) { ShowJavaScriptMessage("invalidTargetReplenishmentSchedule", "Target Replenishment Schedule must be on or after today!"); return false; } } } return true; }
额外注意点
- 如果
NewValues["Schedule"]可能为null,要像检查OldValues一样加上null判断,避免强制转换时抛出异常。 - 也可以用
DateTime.Equals(oldSchedule, newSchedule)来做值相等性检查,效果和!=相反。
内容的提问来源于stack exchange,提问作者Pop
相关产品推荐
相关产品推荐

