2013-05-03 41 views
8

有没有办法控制Kendo UI网格中的分组顺序。有一个小组我想在所有其他小组之前去,但看起来Kendo UI网格按字母顺序排列小组。我知道为分组名称添加一个空间是有效的,但这看起来很骇人。在Kendo UI网格中控制组订单

感谢 利奥

+0

感谢您提供关于在名称前面添加空格的提示(从后端) - 当空间在UI中呈现时实际上会被删除 – 2016-09-19 20:56:18

回答

5

目前没有办法对除该组字段以外的其他组进行排序。有一种方法可以像Telerik那样在非Kendo网格中进行排序,这是我现在对它们最大的特性要求。所以我们现在被卡住了。

对我而言,一件破解工作就是将排序字段和显示字段组合成一个新的字符串列,该列将隐藏范围内的排序字段部分隐藏起来。这是在数据源端完成的(对于我来说,在SQL中)。即使排序字段是数字,新列也会被排序为字符串,因此在某些情况下您必须适当地进行填充。

例如,如果我的数据是:

[ 
    { 
     'Name': 'Alice', 
     'Rank': 10, 
     'RankName': '<span class="myHiddenClass">10</span>Alice', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Bob', 
     'Rank': 9, 
     'RankName': '<span class="myHiddenClass">09</span>Bob', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Eve', 
     'Rank': 11, 
     'RankName': '<span class="myHiddenClass">11</span>Eve', 
     ... (other fields) 
    } 
    ... (Multiple Alice/Bob/Eve records) 
] 

那么我可以通过RankName场,而不是名称字段组。它将在组标题中显示名称字段,但按Rank字段排序。在这种情况下,即使爱丽丝首次按字母顺序排列,鲍勃也会成为第一组。这与您提到的空白填充类似。

-2

使用列来指定列的顺序,一旦你有你的数据,如

columns: [ 
{ 
field: "LastName", 
title: "Last Name" 
}, 
{ 
field: "FirstName", 
title: "First Name" 
} 
] 
0

分组时,自定义排序方向由电网支持的 - 组是按照列的排序方式排序(当使用客户端排序时),当没有分组时。排序方向与JavaScript中的默认排序相同。

0

您可以添加查询您所定义的数据源后,这似乎工作

related.query({ 
     sort: { field: "Sort", dir: "asc"}, 
     group: { field: "CategoryName" }, 
     pageSize: 50 
    }); 

在相互关联的数据源的

2

剑道的分组由给定的排序阵列中的所有元素的名称字段(例如fooBar),然后迭代排序的元素。概括地说,与伪代码:

if (element[i].fooBar!= element[i-1].fooBar) { 
    StartNewGroup(element[i]); 
} else { 
    AddToLastGroup(element[i]); 
} 

由于排序后的数组,需要做的分组,它是棘手的更改排序。我创建的代码来取代内部groupBy()功能,这让我的分组结果,但是我喜欢排序:你的页面加载后

function overrideKendoGroupBy() { 
    var origFunc = kendo.data.Query.prototype.groupBy; 
    kendo.data.Query.prototype.groupBy = function (descriptor) { 
     var q = origFunc.call(this, descriptor); 

     var data = SortYourData(q.data, descriptor.dir); 

     return new kendo.data.Query(data); 
    }; 
} 

呼叫overrideKendoGroupBy()在一些点。现在只需实现SortYourData()函数,其中q.data是一组分组,descriptor.dir"asc""desc"q.data[n]有一个items数组,其中包含第n组中包含的来自原始数据源的元素。

注意:此解决方案仅适用于不使用分页。在应用分组前,页面会被分解,所以如果您的数据跨越多个页面,所有投注都将关闭。

0

尝试AddDescendingAddAscending,见下文

@(Html.Kendo().Chart<T>() 
[... other code ...] 
.DataSource(ds => ds 
    .Read(read => read.Action("action", "controller")) 
    .Group(g => g.AddDescending(model=> model.property)) // <-- subtle difference here! 
) 
[... other code ...] 
) 

http://www.telerik.com/forums/stacked-chart-legend-order

0

例子下面是一个简单的解决方法。 之前不漂亮,但很简单...

在文本前只需添加空格来达到期望的上述排序

[{ 
     'Value': 1, 
     'Description': 'Description 1', 
     'Grouping': 'Group 1' 
    }, 
    { 
     'Value': 2, 
     'Description': 'Description 2', 
     'Grouping': ' Group 2' 
    }, 
    { 
     'Value': 3, 
     'Description': 'Description 3', 
     'Grouping': 'Group 3' 
    }] 

在示例代码组2出现1组因为领先的空间。