如何从 Kendo UI 网格中查找重复记录

How To Find Duplicate Records from Kendo UI Grid

我想突出显示 Kendo UI 网格中重复的那些记录

var onDataBound = function(e) {
  var nodelist = e.sender.dataSource._data;
  for (var i = 0; i < nodelist.length; i++) {
    var tr = nodelist[i];
    // var tds = tr.getElementsByTagName('td');
    // if (tr == e.sender.dataSource._data) return tr;
    // var ff = []; ff = tr; 
  };
}

:

var onDataBound = function (e) { 
    var nodelist = e.sender.dataSource._data; 

    for (var i = 0; i < nodelist.length; i++) { 
        var tr = nodelist[i]; 
        // var tds = tr.getElementsByTagName('td'); 

        if (tr == e.sender.dataSource._data) 
            return tr; 

        var ff = []; 
        ff = tr; 
}

您没有指定要如何检查是否重复,所以我做了一个小功能来检查所有行和所有列是否重复。它看起来比实际更复杂:

var checkGridDuplictyValue = function() {
    var grid = $("#grid").data("kendoGrid"),
        data = grid.dataItems(),
        fields = grid.options.columns.map(x => x.field),
        checkData = {};

    // Gathering data
    data.forEach(d => {
        fields.forEach(f => {  
            if (!checkData.hasOwnProperty(f)) checkData[f] = {};
            if (!checkData[f].hasOwnProperty(d[f])) checkData[f][d[f]] = [];

            checkData[f][d[f]].push(d.uid);
        });
    });

    // Checking for duplicity and styling duplicated rows
    Object.keys(checkData).forEach(k => {
        Object.keys(checkData[k]).forEach(c => {
            if (checkData[k][c].length > 1) {
                checkData[k][c].forEach(x => $(grid.tbody).find('tr[data-uid="' + x + '"]').addClass("duply-row"));
            }
        });
    });
};

Demo.

它收集所有数据 - 注意这一点 - 可见行 并将其添加到基本上是 property=column's valuevalue=array of row's uid 的对象中。所以它知道有多少(以及哪些)行对相同的列具有相同的值。然后它只是循环通过它添加一个 class 到每个重复的行。