如何以编程方式设置Kendo UI网格列宽

g.p*_*dou 9 javascript kendo-ui kendo-grid

我想以编程方式设置Kendo UI网格列宽.我使用以下代码:

function setColumnWidths(grid, options) {
    for (var i = 0; i < options.columns.length; i++) {
        grid.columns[i].width = options.columns[i].width;
    }
}
Run Code Online (Sandbox Code Playgroud)

在执行语句后在chrome中调试时,grid.columns [i] .width似乎被适当地设置为新值,但是GUI中没有任何变化,列宽保持不变.我错过了什么?

Dio*_*rza 9

您需要通过其元素而不是其定义来更改网格的宽度.Kendo网格包含标题和内容,因此您需要更改两个元素.

请改用此代码

$("#grid-id .k-grid-header-wrap").find("colgroup col").eq(xx).width(yy);
$("#grid-id .k-grid-content").find("colgroup col").eq(xx).width(yy);
Run Code Online (Sandbox Code Playgroud)

样品


g.p*_*dou 6

我已经结束了。Dion 的解决方案让我开始了解使用 colgroups,但是该解决方案仅限于没有锁定的列,不同的colgroups 中的列。

另请注意:我不想使用 grid.setOptions,因为它的局限性,破坏了附加的事件和标题(在使用 ASP MVC 帮助程序呈现网格的情况下)

function setColumnWidths(grid, options) {
    var lockedCount = 0;
    for (var i = 0; i < options.columns.length; i++) {
        if (options.columns[i].hasOwnProperty('locked')) {
            if (options.columns[i].locked) {
                lockedCount++;
            }
        }
    }

    for (var i = 0; i < options.columns.length; i++) {
        var width = options.columns[i].width;
        grid.columns[i].width = width;
        if (options.columns[i].hasOwnProperty('locked') && options.columns[i].locked) {
            $("#grid .k-grid-header-locked").find("colgroup col").eq(i).width(width);
            $("#grid .k-grid-content-locked").find("colgroup col").eq(i).width(width);

        } else {
            $("#grid .k-grid-header-wrap").find("colgroup col").eq(i-lockedCount).width(width);
            $("#grid .k-grid-content").find("colgroup col").eq(i - lockedCount).width(width);
        }
    }
    // Hack to refresh grid visual state
    grid.reorderColumn(1, grid.columns[0]);
    grid.reorderColumn(1, grid.columns[0]);
}
Run Code Online (Sandbox Code Playgroud)