如果剑道网格的第一页上不存在该行,如何选择剑道网格行。/

Posted

技术标签:

【中文标题】如果剑道网格的第一页上不存在该行,如何选择剑道网格行。/【英文标题】:How to select kendo grid row if that row is not present on first page of the kendo grid./ 【发布时间】:2016-04-11 21:24:56 【问题描述】:

试图在 dataBound 中选择一个剑道网格行(注意:该行不在网格的第一页上)但它没有选择第三页行。

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;

任何想法如何选择第三页行?上述逻辑适用于剑道网格第一页上的行

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

【问题讨论】:

你不能。不是那样的。这些行(trs)在页面更改时重新创建,因此如果您不在第 3 页中,则无法从中找到tr。您必须尝试另一种方法,也许直接处理数据? 换句话说,您从 url 片段中读取了一些唯一的 ID 值,并且您想从 Kendo UI Grid 中突出显示相应的项目?在这种情况下,具有相同 ID 的项目位于第三页。看看这个链接docs.telerik.com/kendo-ui/web/grid/how-to/Selection/… 尝试遍历数据源,但在页面更改时,其调用数据绑定,导致无限循环。因此没有运气。 var grid = e.sender; var data = grid.dataSource.data(); var res = $.grep(data, function (d) return d.Id == id; );var items = grid.items(); var itemsToSelect = []; items.each(function (idx, row) var dataItem = grid.dataItem(row); if (res[0].Id==dataItem.Id) itemsToSelect.push(row); ); e.sender.select(itemsToSelect); 这里 grid.items();结果仅适用于第一页。 【参考方案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]);
                
            
        ,

【讨论】:

以上是关于如果剑道网格的第一页上不存在该行,如何选择剑道网格行。/的主要内容,如果未能解决你的问题,请参考以下文章

刷新剑道网格,选择框

复选框状态在剑道网格的分页上消失

防止在剑道网格中编辑一行?

剑道网格视图行高亮

设置所选页码 - 剑道网格

如果启用了无限滚动,如何防止剑道网格两次加载数据?