【问题标题】: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();结果仅适用于第一页。

标签: javascript kendo-ui kendo-grid


【解决方案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]);
                }
            }
        },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多