【问题标题】:kendo ui grid: Compare data in multiple selected rows?kendo ui grid:比较多个选定行中的数据?
【发布时间】:2015-02-18 15:09:51
【问题描述】:

好的,在这里重新表述问题,似乎缺乏清晰度。

我有一个剑道 ui 网格,当我对行进行多项选择(一次 2 个或更多)时,我需要比较所有选定行中特定列的值以确定它们是否完全相等(相同) 或不。这是我的 kendo 'change:' 函数,我们称之为 'fancyNumber' 的数据项:

change: function(e) {
    var selectedRows = this.select();
    var selectedDataItems = [];
    for (var i = 0; i < selectedRows.length; i++) {
      var dataItem = this.dataItem(selectedRows[i]);
      selectedDataItems.push(dataItem);
    }

    var selected = $.map(this.select(), function(item) {
       return $(item).text();
    });

function allValuesSame() {
    for (var i = 1; i < selectedRows.length; i++)
    {
        if(this[i] != this[0])
        return false;
    }
    return true;
    }

if (selected.length > 1){
    var selectedRows = $("#myTable").data("kendoGrid").select();
    var fancyNumberText = this.dataItem(this.select()).fancyNumber
    if (allValuesSame(fancyNumberText) === true) {
        alert(fancyNumberText); //just testing to see what I get
    }
    return allValuesSame(fancyNumberText);
    }



    if (selected.length == 0) {
    $('#fancyButton').attr('disabled', 'disabled');
} else if (selected.length == 1) {
    $('#fancyButton').attr('disabled', false);
} else if (selected.length > 1 && allValuesSame == true) {
    $('#fancyButton').attr('disabled', false);
}

},

显然,这是不正确的;我该怎么做?

【问题讨论】:

  • 用新代码更新、改写问题..

标签: javascript jquery kendo-ui


【解决方案1】:

您可以使用 .dataSource 属性来获取您的网格绑定到的模型并在那里进行比较。

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#fields-dataSource

假设您的网格有一个 myDataGrid 的 Id,您将使用:

var gridModel = $("#myDataGrid").data("kendoGrid").dataSource.data();

// Sample comparison
if (gridModel[3].someField === gridModel[5].someField) {
    // Do something with your buttons
}

【讨论】:

  • 谢谢;我明白这一点,但是我如何从比如说选择的 10 行中进行比较;我不一定知道它们存在于 dom 中的什么位置..?
  • 我明白了。根据文档 (docs.telerik.com/kendo-ui/api/javascript/ui/grid#methods-select), .select() 方法将返回所有选定的行。所以你会做类似 var selectedRows = $("#myDataGrid").data("kendoGrid").select();
【解决方案2】:

您需要使用以下设置网格...

.Selectable(sel => sel.Mode(GridSelectionMode.Multiple))
.Events(e => e.Change("onChange"))

一旦你有了这些,你可以选择单独的行并且你有一个在选择时调用的事件onChange

在你的脚本中,连接这个函数...

function onChange() {
  //you can get the selected row like this
  var selected = $.map(this.select(), function(item) {
        return item.getAttribute('data-uid');
    });

  //if selected count > 1 then check logic and enable/disable button
  EnableDisableButton(true, "#myButton");//assuming condition was good
}

您需要设置onChange 来记录每个选择的行值,可能使用数组,然后比较数组中的值。

function EnableDisableButton(isToBeEnabled, buttonName) {

    if (isToBeEnabled)
        $(buttonName).removeAttr("disabled").removeClass("k-state-disabled");
    else
        $(buttonName).prop("disabled", true).addClass("k-state-disabled");
}

【讨论】:

  • 嗨!谢谢..我已经完成了大部分工作,我不是在行数据uid之后,而是在列中的一个数字字符串,在这种情况下,我只是抓住 $('#myTable :nth-child (3)').text();也在 IE9 (yikes) 所以,不使用 .getAttribute()...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多