Подробный шаблон источника данных иерархии MVC веб-сетки Kendo, когда локальные данные

У меня есть сетка кендо в MVC, это объявление Html.Kendo().Grid(Model.Orders)

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

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


person Maldonel    schedule 03.05.2013    source источник


Ответы (2)


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

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

Вот пример ServerHierarchy от Kendo:

@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();
} 
person Mr. T    schedule 02.10.2013
comment
Ваш код помог мне. Так что спасибо. Но я получаю сообщение об ошибке при сортировке, фильтрации и т. д. Есть идеи, почему? - person ary; 25.01.2016

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

<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()
    )
person HaBo    schedule 04.05.2013
comment
Привет, зачем отправлять Model.Order, а затем создавать другую сетку с той же сущностью, мне нужны подробности внутри заказа во второй сетке. Как я могу отправить этот список деталей в это представление? - person Maldonel; 05.05.2013
comment
@maldoxd это только для деталей. Я привел вам пример вложенной сетки. когда вы нажимаете на детали, я покажу вам другую сетку в деталях. Если вам не нужна сетка в деталях, создайте частичное представление деталей по своему усмотрению. - person HaBo; 05.05.2013