2013-05-03 2 views
1

У меня есть кендо сетка в MVC этого объявления Html.Kendo(). Сетка (Model.Orders)Кендо веба-сетка MVC иерархии DataSource detailtemplate когда локальные данные

объекта «Заказы» есть список " Детали". Я хочу поместить этот список во вторую сетку с свойством ClientDetailTemplateId. demo

Мой вопрос, как я установил источник данных шаблона, так как «модели» уже есть данные, в примере иерархии DataSource называют действия в контроллере

ответ

3

Я боролся с этим долгое время, и в конце концов понял, что это может быть сделано с помощью привязки сервера.

Ключ, по-видимому, является (насколько я могу сказать, недокументированным) переменной «item», которая доступна в DetailTemplate, которая дает вам текущую строку в «главной» сетке, которая содержит данные, которые должны быть связаны к деталям сетки («Детали» в вашем случае)

Вот образец ServerHierarchy из кэндо:

@model IEnumerable<Kendo.Mvc.Examples.Models.Employee> 

@{ Html.Kendo().Grid(Model) 
    .Name("Employees") 
    .Columns(columns => 
    { 
     columns.Bound(e => e.FirstName).Width(140); 
     columns.Bound(e => e.LastName).Width(140); 
     columns.Bound(e => e.Title).Width(200); 
     columns.Bound(e => e.Country).Width(200); 
     columns.Bound(e => e.City); 
    }) 
    .DetailTemplate(
     @<text>   
      @(Html.Kendo().Grid(item.Orders) 
        .Name("Orders_" + item.EmployeeID) 
        .Columns(columns => 
        { 
         columns.Bound(o => o.OrderID).Width(101); 
         columns.Bound(o => o.ShipCountry).Width(140); 
         columns.Bound(o => o.ShipAddress).Width(200); 
         columns.Bound(o => o.ShipName).Width(200); 
         columns.Bound(o => o.ShippedDate).Format("{0:d}"); 
        }) 
        .DataSource(dataSource => dataSource.Server())      
        .Pageable() 
        .Sortable() 
        .Filterable() 
      ) 
     </text> 
    ) 
    .RowAction(row => 
    { 
     if (row.Index == 0) 
     { 
      row.DetailRow.Expanded = true; 
     } 
     else 
     { 
      var requestKeys = Request.QueryString.Keys.Cast<string>(); 
      var expanded = requestKeys.Any(key => key.StartsWith("Orders_" + row.DataItem.EmployeeID) || 
       key.StartsWith("OrderDetails_" + row.DataItem.EmployeeID)); 
      row.DetailRow.Expanded = expanded; 
     } 
    }) 
    .Pageable() 
    .DataSource(dataSource => dataSource.Server().PageSize(5))  
    .Sortable() 
    .Render(); 
} 
+0

Ваш код помог мне. Так что спасибо. Но я получаю ошибку при сортировке, фильтрации и т. Д. Любая идея, почему? – ary

0

в шаблоне вместо написания код сетки, позвоните частичный виду и передать Заказам модель к нему

<script id="template" type="text/kendo-tmpl"> 
@Html.Partial("_Orders",Model.Order) 
</script> 

в этом частичном виде написать код сетки Кендо с моделью как модель заказов

Частичный вид

@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.OrderViewModel>() 
      .Name("grid_#=EmployeeID#") 
      .Columns(columns => 
      { 
       columns.Bound(o => o.OrderID).Width(70); 
       columns.Bound(o => o.ShipCountry).Width(110); 
       columns.Bound(o => o.ShipAddress); 
       columns.Bound(o => o.ShipName).Width(200); 
      }) 
      .DataSource(dataSource => dataSource 
       .Ajax() 
       .PageSize(5) 
       .Read(read => read.Action("HierarchyBinding_Orders", "Grid", new { employeeID = "#=EmployeeID#" })) 
      ) 
      .Pageable() 
      .Sortable() 
      .ToClientTemplate() 
    ) 
+0

Привет, Зачем посылать Model.Order, а затем создать еще одну сетку qith той же сущности, мне нужно, это Подробности внутри «Заказ» на второй сетке. Как я могу отправить этот список деталей этого вида? – Maldonel

+0

@maldoxd это только для деталей. Я привел вам пример вложенной сетки. когда вы нажимаете на «подробности», я покажу вам другую сетку в деталях. Если вы не хотите, чтобы сетка была детализирована, тогда спроектируйте частичное представление деталей, как вы хотите. – HaBo

Смежные вопросы