2014-02-25 192 views
0

我在ajax模式下使用Kendo UI網格,並且有一個ClientFooterTemplate,其總和爲一列。這一切都運行良好,但如果我創建/更新或刪除記錄ClientFooterTemplate不更新和總和值保持不變。在編輯時刷新Kendo UI MVC網格的ClientFooterTemplate

如何更新ClientFooterTemplate,以便在創建/更新或刪除後總和值是最新的?

這是我試過到目前爲止:

.Events(events => 
{ 
    events.SaveChanges("SaveChanges"); 
    events.Remove("Remove"); 
    events.Save("SaveChanges"); 
}) 
<script> 
    function SaveChanges(e) { 
     Reload(e.sender); 
    } 
    function Remove(e) { 
     Reload(e.sender); 
    } 
    function Reload(obj) { 
     obj.dataSource.read(); 
    } 
</script> 

的obj.dataSource.read()被實際要求更新之前執行。

+0

Idk保存和保存更改之間的差異,但也許這兩個事件衝突。嘗試刪除儘可能多的變量。因此,不要在SaveChanges之後調用Reload,而只需進行閱讀。也許嘗試一個不同的事件關閉或更改也許 – CSharper

回答

0

您可能需要對網格的數據源進行刷新。 所以在更新後,你可以刷新它像這樣...

var grid = $("#ProposalGrid").data("kendoGrid"); 
      grid.dataSource.page(1) // or 
      grid.dataSource.read() //if dataSource Read expects a paramater 
      grid.dataSource.read({paramNameAsDefinedInController : value }); 
+0

我沒有嘗試過,但保存事件在實際的保存請求之前執行。這是我的嘗試: \t \t \t .Events(事件=> \t \t \t { \t \t \t \t events.SaveChanges( 「調用SaveChanges」); \t \t \t \t events.Remove( 「刪除」); \t \t \t \t事件。保存( 「調用SaveChanges」); \t \t \t}) 它首先執行read(),然後是實際的保存請求。 –

1

您需要更新數據源,如果你使用你的聚集和束緊頁腳下面的JavaScript將更新您的頁腳和每次你創建再次讀取/更新任何行。

.DataSource(dataSource => dataSource 
         .Ajax() 
         .Aggregates(aggregates => 
         { 
          aggregates.Add(p => p.WorkOrderDetailsQuantity).Sum(); 
          aggregates.Add(p => p.Total).Sum();       
         }) 

.Events(E => e.Edit( 「onEdit」)。保存( 「的onSave」))


function onSave(e) 
     { 
      //update the aggregate columns 
      var dataSource = this.dataSource; 
      e.model.one("change", function() { 
       dataSource.one("change", function() { 
        dataSource.aggregates().Total.sum; 
       }); 
       dataSource.fetch(); 
      }); 

     } 

Reagrds

shaz
0

如果你不想重新加載你的數據,你總是可以做這樣的事情(有點哈克...):

首先,使用不同的功能,用於保存事件與調用SaveChanges事件,如:

.Events(events => { 
    events.Save("Save"); 
    events.SaveChanges("SaveChanges"); 
    events.Remove("Remove") 
}) 

其次,定義JavaScript方法,如:

function Save(e) { 
    if (e.value.Gewgaw) { // replace 'Gewgaw' with your column name 
     var footer = $('tr.k-footer-template'), 
      idx = 3, // replace 3 with the column index you want to aggregate 
      aggregate = $(footer).children('td')[idx]; 

     // I had to delay the stuff in this function to get it to load properly 
     setTimeout(function() { 
      var sum = 0; 

      $('tr[role=row][data-uid]').each(function(i, e) { 
       var $cell = $($(e).children()[idx]); 

       /* do any necessary manipulations before this 
        if your cell is formatted */ 
       var cellAmount = parseFloat($cell.text()); 

       sum += cellAmount; 
      }); 

      /* do any necessary formatting to sum before this 
       if your cell is formatted */ 
      $(aggregate).text(sum); 
     }, 50); 
    } 
} 

如果你這樣做的東西和刪除/添加適當的格式,它應該在每次編輯相應的單元格時更新聚合。