【问题标题】:Telerik MVC Grid. Groupin' on the clientTelerik MVC 网格。在客户端分组
【发布时间】:2011-08-22 21:04:47
【问题描述】:

Telerik 专家,我需要你们的帮助!

在我的网格中,数据通过.ClientEvents .OnDataBinding 绑定到客户端。 我只是打电话给grid.dataBind(customData)。数据得到显示,但分组、过滤、排序不起作用。调用 grid.dataBind 后是否可以对内容进行分组或过滤?

现在它只是移动我的列并且不进行任何分组。排序和过滤也失败了。

你能告诉我一个没有任何服务器调用的简单分组示例吗?

【问题讨论】:

    标签: asp.net-mvc-3 grid telerik-mvc


    【解决方案1】:

    您可能要考虑使用Operation Mode feature,它在最近的Q2 2011 release 中发布。

    客户端操作模式 - 这种新模式允许排序等操作, 纯粹在客户端上执行的分页、过滤或分组,通过 对服务器进行一次初始调用以检索所有数据。

    客户端模式实现:

        Html.Telerik().Grid(Model)
        .Name("YourGrid")
        .DataBinding(dataBinding => dataBinding
             .Ajax()
                   .OperationMode(GridOperationMode.Client) // Set to Client
                   .Select("Select", "Home")
        )
    

    否则,使用javascript手动分组,如下:

    <script type='text/javascript'>
    
    function yourGrid_onDataBinding(e){
    
        //Grabs your Grid
        var yourGrid = $("#yourGrid").data("tGrid");
    
        //Removes any existing groupings
        yourGrid.groups = [];        
    
        //Ensure the column you wish to group by is EXACTLY as it appears in the Grid
        yourGrid.group("yourColumnName"); 
    }
    
    </script>
    

    以下是 Telerik MVC 论坛中的一些有用主题,如果这对您来说不是一个可行的解决方案,它们可能会帮助您解决问题:

    Client-Side Grouping | Has a great deal of code for client-side grouping operations

    Client-Side dataBinding | More client-side code, talks about ClientSideGroupHeaderTemplates

    Grouping with OperationMode.Client | If you have any issues with OperationMode.Client

    【讨论】:

    • 我尝试了不同的方法,如果没有额外的重新绑定和对控制器的另一个调用,它们都不起作用。例如,我向客户端发送了一次数据,并且无法再次发送。我必须管理客户端上的所有内容,而不需要对服务器进行任何额外的调用。分组不起作用。
    • 您使用的是允许 OperationMode.Client 用户的版本吗?因为这似乎完成了你想要达到的目标?
    • 另外,如果您可以发布任何代码,我相信我们可以为您提供更好的帮助。
    【解决方案2】:

    据我所知,如果不再次对服务器造成任何影响,您将无法做到这一点。 但是你可以通过 Ajax throw JavaScript 来做到这一点。

    您需要做的就是这些方法将重新绑定您的网格:

    // For filtering
    grid.filter("propName~eq~youValue"); 
    
    // For grouping 
    grid.group("column Title"); 
    

    注意这是列标题而不是属性名称,所以如果您的属性是“CustomerName”并且您的列标题是“Customer Name”,那么您应该传递列标题。

    无论如何,这都会对控制器进行 Ajax 调用以重新绑定 Grid。


    更新:

    您的网格应该设置.EnableCustomBinding(true),并且您应该使用[GridAction(EnableCustomBinding = true)] 属性装饰控制器方法,以获取您的Ajax 网格。

    希望对你有所帮助

    【讨论】:

    • 我在2011-2-824 版本上试过这个,一切正常!!那么你使用的是哪个版本的 Telerik-Extensions 呢?
    【解决方案3】:

    我在我的网格中做 exact 同样的事情。我正在使用 2011.2.629,jQuery 1.6.2。我实际上是为外部过滤做的——所以我不使用内置的过滤——但是分组和排序都对我有用。

    我们需要一些代码,伙计。

    正如其他人所说,请确保您拥有以下套装:

    dataBinding.Ajax().OperationMode(GridOperationMode.Client)
    

    您的网格是否在运行时绑定?如果没有,请将其绑定到与您在 dataBind() 中使用的相同的空视图模型。另外,您如何绑定到新列表?它可能在您的 onDataBinding() 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      相关资源
      最近更新 更多