2014-12-02 50 views
0

排序和篩選在與ViewModel實體綁定的列上不起作用。它與其他列工作正常。如何在Kendo UI MVC網格信號的InLine編輯中對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 => m.LocationViewModel.LocationName),排序&篩選工作正常,但是當編輯記錄時,我無法獲得此列的DropDownEditor。我在這裏使用「InLine」編輯。

我已經測試了這個「PopUp」編輯和一切工作正常。我想通過「InLine」編輯來實現這一點。

請告訴我該怎麼做才能通過Cascading下拉菜單和排序功能實現「InLine」編輯。謝謝!

回答

0

有一些事情要做。首先進行過濾等,您需要像在正常的ajax調用中那樣使用datasourcerequest參數,但是您會發現排序不起作用。

public DataSourceResult Read(MyDataSourceRequest request) 
    { 
} 

這一點,因爲傳遞排序的集合劍道經常使用「種種」不工作,這個集合由signalr數據源爲「排序」(無S)通過。你將不得不使用動態linq nuget包,它有一個自定義數據源請求,可以和signalr一起工作。請將自己的代碼複製到自定義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(真)等

.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); 
    }) 
+0

感謝您的回答,Loic! – giparekh 2015-02-04 13:38:21

+0

如果您覺得它的確如此,請標記爲解決方案 – 2015-02-04 13:42:22