2014-02-25 91 views
1

好的,所以我們有一些使用Kendo UI網格的遺留代碼。如何在排序上同步Kendo UI Grid數據源?

對網格進行排序後,我們需要通過遍歷JQuery選擇的'tr'列表來讀取與每行對應的DataSource項,然後根據行本身的索引選擇DataSource項。

的問題存在,該數據源不排序當電網排序,所以你不能簡單地得到各行的索引和查找相應的數據源的項目,像這樣...

$('td:nth-child(' + colIndex + ')', $('tbody', grid.element).eq(0)).each(
     function (iIndex) { 
      var td = $(this); 
      var tr = td.parent(); 
      var data = grid.dataSource.data()[iIndex]; 

      if (data.Status.toLowerCase() !== 'c') { 
       totalBalanceDue = (totalBalanceDue - data.Payment) > 0 ? (totalBalanceDue - data.Payment) : 0; 
      }; 
      td.html('$' + totalBalanceDue.formatMoney(2, '.', ',')); 
     } 
    ); 

回答

0

看起來我必須自己回答這個問題。

我發現,通過搜索文檔和網頁,我接近這個方式並不一定準確。可以使用dataSource.getByUid()函數從DataSource.data()數組中獲取相應的數據項,而不是嘗試對數組進行排序以匹配gridview的行,我可以使用該行的data-uid屬性。

這就像我需要的一樣工作。

 $('td:nth-child(' + colIndex + ')', $('tbody', grid.element).eq(0)).each(
      function (iIndex) { 
       var td = $(this); 
       var tr = td.parent(); 

       //gets the corresponding dataitem for the selected row. 
       var data = grid.dataSource.getByUid(tr.data("uid")); 
       if (data.Status.toLowerCase() !== 'c') { 
        totalBalanceDue = (totalBalanceDue - data.Payment) > 0 ? (totalBalanceDue - data.Payment) : 0; 
       }; 
       td.html('$' + totalBalanceDue.formatMoney(2, '.', ',')); 
      } 
     ); 
2

這一切都不需要。所有你需要使用的是dataSource的view()方法。

+0

你的方法很好,但如果你看看我提供給這個問題的答案,你會發現它是更好,更體系結構的解決方案。 –