Я боролся с этим долгое время, и в конце концов понял, что это может быть сделано с помощью привязки сервера.
Ключ, по-видимому, является (насколько я могу сказать, недокументированным) переменной «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();
}
Ваш код помог мне. Так что спасибо. Но я получаю ошибку при сортировке, фильтрации и т. Д. Любая идея, почему? – ary