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中存在组的顺序
答案 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
}]
});
这应该就是你需要做的一切。希望这会有所帮助。