2015-01-20 53 views
0

感觉就像我失去了很多时间寻找这件事,仍然没有找到任何有效的工作(当然,这工作正常)。我有一套用户需求的嵌套网格,每个嵌套网格钻入下一个等等,所有工作正常。它使用客户端模板处理,它们在扩展时执行ajax调用,然后显示数据。Kendo Grid Fluent API DataBound事件为Child Grid显示无项目文本?

我的问题是,如果没有结果的扩展之一,剑道只显示子网格标题,没有别的。当我连接到DataBound事件时(在网格上,.Events(e => e.DataBound(“myJavaScriptFunctionName”)),这不是Kendo网格,并且如果我传递了孩子kendo网格的名称(这是独特的通过使用#=#键),它给了我在我的数据源0项。

我不知道这是否是因为它做一个ajax后回来,然后OnDataBound火灾它才回来?

我只需要显示“未找到任何项目”的消息,使用户更好的体验时,有没有数据(这真的只是发生在最低水平)

够了的话,这里是一些示例代码:

<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我已经尝试了一些东西,包括从这个线程(Display a message within the Kendo grid when it's empty)没有运气的答案。那个人总是告诉我,我的数据源中有0个项目(原来它是未定义的,然后我传递了网格名称,但仍然没有运气)。

有没有人有一个很好的方式,只是说“没有项目显示”,而使用Fluent API嵌套网格?我觉得我在这里错过了一些简单的东西。

谢谢!

回答

1

我想通这些了:

由于我使用AJAX回传,当初叫出于某种原因,DataBound事件网格项目并不总是可用的(感觉就像他们是应该的,因为它是DataBound,但事实并非如此)

我在500ms的setTimeout中包裹了我的无结果查询,以便能够捕获它,而且我会回到原始错误。我还修改了.find(...叫除去K-网头,因为该类不是我的格子输出和COLGROUP是直接放在桌上的k栅板下面。

function DisplayNoResultsFound(e) { 
    var self = e; 
    setTimeout(function (item) { 
     var grid = self; 
     var dataSource = grid.data('kendoGrid').dataSource; 
     var colCount = grid.find('colgroup > col').length; 
     var noResultsMessage = '@Resources.Global.NoResultsFound'; 

     // If there are no results place an indicator row 
     if (dataSource._view.length == 0) { 
      grid.find('tbody') 
       .append('<tr class="kendo-data-row"><td colspan="' + colCount + '" style="text-align:center"><b>' + noResultsMessage + '</b></td></tr>'); 
     } 
    }, 500); //Need to delay for ajax postback 
} 

此代码是通过从数据绑定事件通过jQuery的网格项名为:

.Events(e => e.DataBound(DisplayNoResultsFound($('\\#SumGrid_#=ResultYear#_#=ResultQuarter#_#=ResultMonth#_#=ResultWeekStart#_#=ResultDate#_#=Region#_#=CustomerName#'))") 

希望这可以帮助别人,将来别人

+0

这也帮助我..一年后:)! – 2016-01-14 13:02:22