列选择器不能很好地处理太多具有 autoresizeOnLoad 或 autoresizable 的列

Column Chooser does not play well with too many columns having autoresizeOnLoad or autoresizable

演示位于...

我注意到 2 个问题。

1) 在“列选择器”对话框中,我无法将列名称栏拖放到其他框中。

2) 单击 VIN 和 Year 列的“-”图标,然后单击 "OK" 按钮。列 header 无法调整大小。那么,如果这是问题所在,我该如何将列选择器的 autoresizeOnLoad 设置为 false。

您已经使用了 columnChooserdone 回调并且调用了

this.jqGrid("remapColumns", perm, true);

明确在您的代码中。你需要做的是添加调用

this.jqGrid("autoResizeAllColumns");

直接调用 remapColumns 之后。 autoresizeOnLoad:true 只需调用 autoResizeAllColumns,但它会在 重新加载网格时执行此操作 。您想在使用 columnChooser 之后进行自动调整大小。

另一种可能的实现方式是使用以下事件处理程序:

$("#BatchReportJqgrid_Spreadsheet").bind("jqGridRemapColumns", function () {
    $(this).jqGrid("autoResizeAllColumns");
});

最后的代码在每次调用 remapColumns 方法后调用 autoResizeAllColumns。因此,您可以从 columnChooser 的参数列表中删除不需要的 done 回调,并且不要显式调用 remapColumns。方法 columnChooser 将调用该方法,但上述 "jqGridRemapColumns" 事件的事件处理程序仍然可以在列重新映射结束时调整列的大小。

更新:如果你下次post JSFiddle 演示会更好。人们将能够对您的代码进行一些更改并重试这些更改。

在我看来,不需要进行上述任何更改,只需使用 jqGrid 的 shrinkToFit: false 选项即可。它将防止在隐藏 jqGrid 的列时更改列的宽度。