您需要使用子网格的嵌套(分层)模型为网格实现本地数据绑定(混合实现的种类),这会导致初始加载/滞后并且没有进一步的开销。假设您使用的是 C# 包装器:
public class TestViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public IList<AssetViewModel> Assets { get; set; }
}
public class AssetViewModel
{
public long Id { get; set; }
public string AssetName { get; set; }
}
视图将是:
@model IEnumerable<IRAS.Animation.Pipeline.ViewModel.ProjectManagement.TestViewModel>
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.Id);
columns.Bound(p => p.Name);
})
.Pageable()
.Sortable()
.Scrollable(scr=>scr.Height(430))
.Filterable()
.DetailTemplate(@<text>
@(Html.Kendo().Grid(item.Assets)
.Name("grid_"+item.Id)
.Columns(columns =>
{
columns.Bound(o => o.Id);
columns.Bound(o => o.AssetName);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(5)
.ServerOperation(false)
)
.Pageable()
.Sortable()
)
</text>)
.DataSource(dataSource => dataSource
.Server()
.PageSize(20)
)
)
当然,我们需要提供从控制器动作到视图的分层模型集合。我们同时使用 .Ajax() 和 .Server() ,因此主网格将服务器绑定事物(排序、分组、过滤)。现在我们可以通过单击按钮来展开所有子网格,而无需单独调用服务器。