【问题标题】:How to compare dates in 2 columns of a row in Kendo UI Grid?如何比较 Kendo UI Grid 中一行 2 列中的日期?
【发布时间】:2016-09-06 09:52:54
【问题描述】:

我有一个剑道 UI 网格,我有 2 列 StartDate 和 EndDate。 在进行内联编辑时,我想比较 StartDate 不应大于 EndDate。 我在 StartDate 字段的自定义验证中执行此操作。 但是 var StartDate 被分配了 null 值。

model: {
                id: "BusinessAreaDivisionMappingId",
                fields: {
                    BusinessAreaDivisionMappingId: { type: "number", editable: false, nullable: false },

                    StartDate: {
                        from: "BusinessAreaDivisionMappingEntity.StartDate", type: "date",
                        validation:
                            {
                                required: true,
                                dateComparisonValidation: function (input) {
                                    debugger;
                                    if (input && (input.attr("name") == "StartDate"|| input.attr("name") == "EndDate")) {
                                        input.attr("data-dateComparisonValidation-msg", "Start Date cannot be more than End Date");
                                        var startDate = input.closest(".k-edit-form-container").find("[name='StartDate']").data("kendoDatePicker");
                                        var endDate = input.closest(".k-edit-form-container").find("[name='EndDate']").data("kendoDatePicker");
                                        if (Date(startDate) > Date(endDate)) {
                                            return false;
                                        }
                                    }
                                    return true;
                                }
                            }
                    },
                    EndDate: { from: "BusinessAreaDivisionMappingEntity.EndDate", type: "date" }
                }
            }

【问题讨论】:

    标签: javascript kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    更新

    这里是完整的工作示例:

    http://dojo.telerik.com/IqeNA


    我认为对于用户体验来说,不能选择无效值比较以查看这些值无效并重新选择它们确实更好。

    如果您同意为带有日期的列添加自定义编辑器:

    var dateEditor = function (container, options) {
    var input = $('<input />');
    
    input.appendTo(container)
      .kendoDatePicker({
        format: "dd.MM.yyyy"
      });
    var datePicker = input.data("kendoDatePicker");
      switch (options.field) {
        case "startDate":
          if (options.model.finishDate) {
            datePicker.max(options.model.finishDate);
          }
          break;
    
        case "finishDate":
          if (options.model.startDate) {
            datePicker.min(options.model.startDate);
          }
          break;
      }
    };
    

    在此处了解自定义编辑器

    http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-columns.editor

    如果您在为内联编辑器添加编辑器时遇到问题,请阅读该文章

    Kendo Grid using inline editing and custom editor dropdown control

    【讨论】:

    • 这不起作用,假设第 1 步:我选择开始日期 9 月 6 日。第 2 步:我可以选择结束日期 5 日。
    • 什么不起作用?你有错误吗?这是我在生产中使用它的完美解决方案
    • 在您的情况下,您命名的模型字段以大写字母开头。 “开始日期”与“开始日期”。首先尝试调试它,将名称替换为您在模型中使用的名称
    • 我已经这样做了。我认为 Datepicker 正在从缓存中获取先前的范围,因此我可以选择无效的日期。您知道如何在网格列中为 datepicker 禁用缓存吗?
    • 日期选择器范围没有缓存。发布您的模型代码以及您如何使用自定义编辑器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多