2015-01-20 49 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