感觉就像我已经浪费了很多时间来寻找这个并且仍然没有找到任何有效的东西(嗯,可以正常工作)。我有一组用于满足用户需求的嵌套网格,每个网格都深入到下一个网格,等等,一切正常。它是使用客户端模板处理的,这些模板在扩展时执行 ajax 调用,然后显示数据。
我遇到的问题是,如果其中一个扩展没有结果,Kendo 只会显示子网格标题,而不会显示其他任何内容。当我连接到 DataBound 事件(在网格上,.Events(e => e.DataBound("myJavaScriptFunctionName"))时,这不是剑道网格,并且如果我传递了子剑道网格的名称(这是唯一的通过使用 #=#) 中的键,它在我的数据源中为我提供了 0 个项目。
我不确定这是否是因为它做了一个 ajax 回发,然后 OnDataBound 在它回来之前触发?
我只需要在没有数据时显示“No Items Found”消息以使用户体验更好(这实际上只发生在最低级别)
话不多说,下面是一些示例代码:
<script id="SecondToLastTemplate" type="text/kendo-tmpl">
@(Html.Kendo().Grid<CustomerViewModel>()
.Name("SumGrid_#=ResultYear#_#=ResultQuarter#_#=ResultMonth#_#=ResultWeekStart#_#=ResultDate#_#=Region#")
.Columns(column =>
{
column.Bound(x => x.CustomerName).Width("23%");
column.Bound(x => x.CustomerSummaryItem1).Width("14%");
column.Bound(x => x.CustomerSummaryItem2).Width("14%");
column.Bound(x => x.CustomerSummaryItem3).Width("14%");
})
.DataSource(dataBinding => dataBinding
.Ajax()
.PageSize(500)
.Read(read => read.Action("GetCustomerSummaryItems", Constants.Controller_ReportController, new
{
ResultYear = "#=ResultYear#"
,ResultQuarter = "#=ResultQuarter#"
,ResultMonth = "#=ResultMonth#"
,ResultWeekStart = "#=ResultWeekStart#"
,ResultDate = "#=ResultDate#"
,Region = "#=Region#"
}))
)
.Scrollable(scrolling => scrolling.Enabled(false))
.Sortable()
.Filterable(filtering => filtering.Enabled(true))
.ClientDetailTemplateId("LastTemplate")
.Pageable(paging => paging.Enabled(false))
.ToClientTemplate()
)
</script>
<script id="LastTemplate" type="text/kendo-tmpl">
@(Html.Kendo().Grid<CustomerDetailsViewModel>()
.Name("SumGrid_#=ResultYear#_#=ResultQuarter#_#=ResultMonth#_#=ResultWeekStart#_#=ResultDate#_#=Region#_#=CustomerName#")
.Columns(column =>
{
column.Bound(x => x.CustomerDetails1).Width("23%");
column.Bound(x => x.CustomerDetails2).Width("20%");
column.Bound(x => x.CustomerDetails3).Width("35%");
column.Bound(x => x.CustomerDetails4).Width("14%");
})
.DataSource(dataBinding => dataBinding
.Ajax()
.PageSize(500)
.Read(read => read.Action("GetCustomerDetails", Constants.Controller_ReportController, new
{
ResultYear = "#=ResultYear#"
,ResultQuarter = "#=ResultQuarter#"
,ResultMonth = "#=ResultMonth#"
,ResultWeekStart = "#=ResultWeekStart#"
,ResultDate = "#=ResultDate#"
,Region = "#=Region#"
,CustomerName = "#=CustomerName#"
}))
)
.Events(e => e.DataBound("onDataBound"))
.Scrollable(scrolling => scrolling.Enabled(false))
.Sortable()
.Filterable(filtering => filtering.Enabled(true))
.Pageable(paging => paging.Enabled(false))
.ToClientTemplate()
)
</script>
OnDataBound 我尝试了一些事情,包括来自这个线程的答案(当它为空时在 Kendo 网格中显示一条消息)没有运气。那个特别总是告诉我我的数据源中有 0 个项目(最初它是未定义的,然后我传递了网格名称,但仍然没有运气)。
在使用带有嵌套网格的 Fluent API 时,有没有人有一种很好的方式来说“没有要显示的项目”?我觉得我在这里错过了一些简单的东西。
谢谢!