Kendo 网格自定义分组排序顺序
Kendo Grid custom grouping sort order
我正在尝试弄清楚如何在分组时对列进行自定义排序。这是描述我希望它如何工作的屏幕截图:
在屏幕截图中,我默认按“Status”列进行分组。该列有四个可能的值:不安全 |隔离 |豁免 |异常。正常排序按字母顺序排序,但我希望仅按 Unsafe | 排序“Status”列的分组排序 |隔离 |豁免 |异常。是否可以按照我描述的顺序对列 "Status" 进行分组排序?
如果这不可能,我有什么选择?谢谢!
这可以通过使用您的数据返回一个计算字段来实现,该数据是表示项目排序顺序的数值。然后按计算字段分组,但在组中显示状态值 header.
我使用 hack 来让它工作,它基本上是这样的:
在控制器中:
foreach (MyCustomModelitem in MyCustomModel)
{
item.CustomGroupField= item.Status+ "_@@" + MyGetSortIndexForStatus(item.Status).ToString();
}
在视图中
.Columns(columns =>
{
columns.Bound(t => t.CustomGroupField).Width(185).Title("Status")
.ClientGroupHeaderTemplate("# var a = value.split('_@@') # #=a[0]#")
.ClientTemplate("${Status}")
.Filterable(filterable => filterable.UI("customFieldFilter"));
})
....
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(750)
.Read(read => read.Action("GetSummaryData", "MyContgroller", @Model))
.ServerOperation(true)
.Group(grp =>
{
if(!String.IsNullOrEmpty(@Model.Groups))
foreach(string g in @Model.Groups.Split(','))
grp.Add(g, typeof(string));
})
)
可选的自定义下拉列表
function customFieldFilter(element) {
if (element == null) return;
element.kendoDropDownList({
dataTextField: "Status",
dataValueField: "CustomSortField",
dataSource: {
transport: {
read: "@Url.Action("GetMyStatuses", "MyController")"
}
}
});
我最终实现这一目标的方法是为此 属性 创建一个枚举,它按照我想要的自定义顺序排序。然后,我只是使用 .ClientTemplate()
和 .ClientGroupHeaderTemplate()
将这些值转换为正确的字符串。
我正在尝试弄清楚如何在分组时对列进行自定义排序。这是描述我希望它如何工作的屏幕截图:
在屏幕截图中,我默认按“Status”列进行分组。该列有四个可能的值:不安全 |隔离 |豁免 |异常。正常排序按字母顺序排序,但我希望仅按 Unsafe | 排序“Status”列的分组排序 |隔离 |豁免 |异常。是否可以按照我描述的顺序对列 "Status" 进行分组排序?
如果这不可能,我有什么选择?谢谢!
这可以通过使用您的数据返回一个计算字段来实现,该数据是表示项目排序顺序的数值。然后按计算字段分组,但在组中显示状态值 header.
我使用 hack 来让它工作,它基本上是这样的:
在控制器中:
foreach (MyCustomModelitem in MyCustomModel)
{
item.CustomGroupField= item.Status+ "_@@" + MyGetSortIndexForStatus(item.Status).ToString();
}
在视图中
.Columns(columns =>
{
columns.Bound(t => t.CustomGroupField).Width(185).Title("Status")
.ClientGroupHeaderTemplate("# var a = value.split('_@@') # #=a[0]#")
.ClientTemplate("${Status}")
.Filterable(filterable => filterable.UI("customFieldFilter"));
})
....
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(750)
.Read(read => read.Action("GetSummaryData", "MyContgroller", @Model))
.ServerOperation(true)
.Group(grp =>
{
if(!String.IsNullOrEmpty(@Model.Groups))
foreach(string g in @Model.Groups.Split(','))
grp.Add(g, typeof(string));
})
)
可选的自定义下拉列表
function customFieldFilter(element) {
if (element == null) return;
element.kendoDropDownList({
dataTextField: "Status",
dataValueField: "CustomSortField",
dataSource: {
transport: {
read: "@Url.Action("GetMyStatuses", "MyController")"
}
}
});
我最终实现这一目标的方法是为此 属性 创建一个枚举,它按照我想要的自定义顺序排序。然后,我只是使用 .ClientTemplate()
和 .ClientGroupHeaderTemplate()
将这些值转换为正确的字符串。