2016-01-07 75 views
-1

尝试在dataBound中选择剑道网格行(注意:该行不在网格的第一页),但它没有未选择第3页的行。如何选择剑道网格行,如果该行不在剑道网格的第一页上。/

dataBound: function(e) { 
      if (id!== "" && id!== undefined && id!== null) { 
       var grid = e.sender; 
       grid.select("tr:contains('" + id + "')"); 
      } 
     }, 

这里的id是在页面的URL和获取ids值如下所示:这将传递到dataBound id var。

id = $location.search().id; 

任何想法如何我可以选择第3页的行?以上逻辑适用于剑道网格的第一页上存在的行

尝试选择第3页行时,它只停留在第一页,因为该行属于网格的第三页,所以没有选中任何内容。

+0

你不能。不是那样。行('tr's)是在换页时重新创建的,所以如果你不在第3页中,你不能从它找到一个'tr'。你必须尝试另一种方法,可能直接处理数据? – DontVoteMeDown

+0

换句话说,你从URL碎片读取一些唯一的ID值,你想突出显示来自Kendo UI Grid的相应项目?在这种情况下,具有相同ID的项目位于第三页。看看这个链接http://docs.telerik.com/kendo-ui/web/grid/how-to/Selection/persist-row-selection-while-paging –

+0

尝试遍历数据源,但在页面的变化,它的调用databound,导致无限循环。因此没有运气。 – test

回答

1

下面的函数用于查找dataItem和任何页面行的选择。

Var initial防止数据绑定在第一次调用后被调用。

function findDataItem(ragGrid, dataItem) { 
     initial = true; 
     var ds = ragGrid.dataSource; 
     var view = window.kendo.data.Query.process(ds.data(), { 
      filter: ds.filter(), 
      sort: ds.sort() 
     }).data; 
     var index = -1; 
     for (var x = 0; x < view.length; x++) { 
      if (view[x].Id == dataItem.Id) { 
       index = x; 
       break; 
      } 
     } 
     if (index === -1) { 
      return; 
     } 
     var page = Math.floor(index/ragGrid.dataSource.pageSize()); 
     var targetIndex = index - (page * ragGrid.dataSource.pageSize())+ 1; 
     ragGrid.dataSource.page(++page); 
     var row = $("#ragGrid").find("tr:eq(" + targetIndex + ")"); 
     ragGrid.select(row); 
    } 

这里是dataBound函数,并在dataBound第一次调用中调用findDataItem。

dataBound: function (e) { 
      if (id !== "" && id !== undefined && id !== null) { 
       if (!initial){ 
       var grid = e.sender; 
       var data = grid.dataSource.data(); 
       var res = $.grep(data, function (d) { 
        return d.Id == id; 
       }); 
       findDataItem(grid, res[0]); 
       } 
      } 
     },