2014-02-25 62 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

你的方法很好,但如果你看看我提供给这个问题的答案,你会发现它是更好,更体系结构的解决方案。 –