如何禁用应用于Kendo Grid中的组的默认排序

时间:2014-12-06 12:25:05

标签: kendo-grid

element.kendoGrid({
dataSource: {
    data: scope.people,
    group: {
    field: "name"
    }
},
groupable: true,
sortable: false,
pageable: {
    refresh: true,
    pageSizes: true
},
columns: scope.columns
});



通过数据源
$ scope.people = [man1,man2,man3,man4];
    var man1 = new Man('Test name2',25);
    var man2 = new Man('Test name1',28);
    var man3 = new Man('Test name1',21);
    var man4 = new Man('Test name3',21);

实际结果:
组按以下顺序显示
名字:测试名称1
名字:测试名称2
名字:测试名称3

预期结果:
组应按以下顺序显示
名字:测试名称2
名字:测试名称1
名字:测试名称3

我们如何实现这一目标? 默认情况下,组按升序显示。但是我想要在DataSource中存在组的顺序

1 个答案:

答案 0 :(得分:2)

如果您可以通过Ajax添加数据,那么这并不难。没有ajax,我还没有办法做到这一点。

你的ajax看起来像这样:

$.ajax({
  ...[add your data call info here]...
}).done(function(result) {
  var data = result.d.results; //this may be different for others
  var sortNum = 1;
  var lastVal;
  for (var i = 0; i < data.length; i++) {
    var val = data[i]["Firstname"];
    if (!lastVal) {
      lastVal = val;
    }
    if (val !== lastVal) {
      sortNum++;
      lastVal = val;
    }
    data[i]["SortOrder"] = sortNum;
  }
});

这是因为您只想将数据原样传递到您的kendo网格中。 现在你有了一个排序列,告诉kendo对该新列进行分组,并将文本替换为原始组列以正确显示名称。

//fetch FirstName value and return it to display instead of SortOrder value
function getHeader(val) {
  var $data = $('.grid').data('kendoGrid').dataSource.data();

  for (var i = 0; i < $data.length; i++) {
    if ($data[i].SortOrder === val.value) {
      return data[i].FirstName + '';
    }
  }
}

$('.grid').kendoGrid({
  //... do all your normal kendo initialization, I'll just add the stuff you need to change 
  dataSource: {
    schema: {
      model: {
        fields: { //add the new SortOrder column
          SortOrder: {
            type: 'number'
          }
        }
      }
    },
    group: {
      field: "SortOrder"
    }
  },
  columns: [{ //add the new SortOrder column, but call the getHeader function to override the value displayed
    field: "SortOrder",
    hidden: true,
    groupHeaderTemplate: getHeader
  }]
});

这应该就是你需要做的一切。希望这会有所帮助。