如何在Inndo编辑Kendo UI MVC网格信号R中为viewmodel列进行排序和过滤?

时间:2014-12-02 14:26:50

标签: asp.net-mvc sorting kendo-ui signalr kendo-grid

排序和过滤不适用于与ViewModel实体绑定的列。它与其他列一起正常工作。

网格代码示例:

@(Html.Kendo().Grid<abc.Models.ShippingViewModel>()
    .Name("ShippingGrid")
    .Columns(c =>
    {
        c.Bound(m => m.Id).Hidden();
        c.Bound(m => m.LocationViewModel)
            .ClientTemplate("#=LocationViewModel.LocationName#")
            .Title("Pickup Location")
            .HeaderHtmlAttributes(new { @title = "Pickup Loactions" });
        c.Bound(m => m.UnitsShipped)
            .HtmlAttributes(new { style = "text-align:right" })
            .HeaderHtmlAttributes(new { title = "Units Shipped", style = "text-align: right" });

型号:

public class InHouseShippingViewModel
    {
        [ScaffoldColumn(false)]
        public int Id { get; set; }

        [Required]
        [UIHint("ShippingLocationEditor")]
        public LocationViewModel LocationViewModel { get; set; }

        [Required]
        [Display(Name = "Units Shipped")]
        [UIHint("ComanexIntegerEditor")]
        [DisplayFormat(DataFormatString = GlobalVaribleDeclarations.displayFormatForInteger)]
        public int UnitsShipped { get; set; }
    }

集线器/控制器代码:

public IEnumerable<ShippingViewModel> Shipping_Read()
        {
            var queryResult = ShippingRepository.Shipping_Read();
            return queryResult;
        }

这里排序在“UnitShipped”列上正常工作,而它不在“LocationViewModel”列上工作。如果我使用c.Bound(m =&gt; m.LocationViewModel.LocationName),则排序&amp;过滤工作正常但是在编辑记录时我无法获得此列的DropDownEditor。我在这里使用“InLine”编辑。

我用“PopUp”编辑测试了这一点,一切正常。我想通过“InLine”编辑实现这一点。

请告知我应该怎么做才能实现“内联”编辑,包括级联下拉列表和排序。谢谢!

1 个答案:

答案 0 :(得分:0)

有许多事情可做。首先是过滤等,你需要像普通的ajax调用那样使用datasourcerequest参数,但是你会发现排序不起作用。

public DataSourceResult Read(MyDataSourceRequest request)
    {
}

这不起作用,因为剑道常规使用&#39;排序&#39;为了传递一个排序集合,这个集合由signalr数据源传递为&#39; sort&#39; (没有)。您将不得不使用动态linq nuget包,该包具有可与信号器一起使用的自定义数据源请求。请在解决方案中复制他们的代码,以获取自定义datarequest对象和稍微todatasourceresult语法。

http://www.telerik.com/forums/problems-with-grid-using-signalr-and-serverfiltering-sorting-and-paging

中继信息需要在datasourceresult中包装

Clients.Others.update(WrapInDataSourceResult(item));

        public DataSourceResult WrapInDataSourceResult(EmployeeViewModel item)
    {
        return new DataSourceResult
               {
                   Data = new[]
                          {
                              item
                          }
               };
    }

您还需要激活服务器端选项serverpaging(true)等

.SignalR()
.AutoSync(true)
.Sort(c => c.Add(e => e.FullName).Ascending())
.ServerAggregates(true)
.ServerPaging(true)
.ServerSorting(true)
.ServerGrouping(true)

并在架构中

 .Schema(schema => schema
    .Data("Data")
    .Total("Total")
    .Aggregates("Aggregates")
    .Groups("Groups")
    .Model(model =>
    {
        model.Id(m => m.EmployeeId);
    })