【问题标题】:Kendo Grid custom grouping sort orderKendo Grid 自定义分组排序顺序
【发布时间】:2015-02-25 19:54:49
【问题描述】:

我试图弄清楚如何在分组时对列进行自定义排序。这是一个截图,描述了我希望它如何工作:

在屏幕截图中,我默认按“Status”列进行分组。该列有四个可能的值: 不安全 |隔离 |放弃 |异常。正常排序是按字母顺序排序的,但我希望只有“Status”列的分组排序按Unsafe | 排序。隔离 |放弃 |异常。是否可以按照我描述的顺序对“状态”列进行分组排序?

如果这是不可能的,我有什么选择?谢谢!

【问题讨论】:

  • 不直接支持,但这篇文章有一个解决方法:stackoverflow.com/questions/16366450/…
  • 听起来像是一个有效的解决方法。我们可以对 Status 列使用枚举,并通过 ClientTemplate 对其进行转换。那只是意味着我们也必须为此列创建一个自定义过滤器函数......
  • 我在stackoverflow.com/questions/16366450/… 上添加了一个新答案,这里可能也有相关性。

标签: c# asp.net-mvc sorting kendo-grid kendo-asp.net-mvc


【解决方案1】:

这可以通过返回带有数据的计算字段来实现,该数据是表示排序中项目顺序的数值。然后按计算字段分组,但在组头中显示状态值。

我使用了一个 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")"
            }
        }
    });

【讨论】:

  • 听起来我们也想出了类似的解决方案。我会检查一下,然后告诉你进展如何。
【解决方案2】:

我最终实现这一目标的方法是为该属性创建一个枚举,该枚举按我想要的自定义顺序排序。然后,我只是使用.ClientTemplate().ClientGroupHeaderTemplate() 将这些值转换为正确的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多