You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用!=比较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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:28:12