JQGrid:调整列大小后调整网格宽度
JQGrid: Resize Grid Width After Column Resized
我想在调整列的大小后调整网格的宽度(这样网格的宽度将与列的宽度之和匹配,包括调整大小的列的新宽度)。这样可以防止出现水平滚动条。
这有点类似于这个问题,除了隐藏/显示列后调整网格大小外,我还希望它在扩展/收缩列时调整大小:
如果你看一下@Oleg提供的问题中的演示,你可以看到网格不会在调整列的大小时调整大小。
我可以使用一个resizeStop
事件,然后使用方法setGridWidth
将网格设置为列宽度之和的宽度。不过,我不知道如何对列的宽度求和。。。也许JQGrid中内置了一些东西,我可以用它轻松地做到这一点?
非常感谢你的建议!
我个人觉得这个问题很好。我对如何改进网格宽度的计算算法提出了许多建议。我有两次在建议中包含了你想要的行为,但Tony(jqGrid的开发人员)删除了部分更改。
在当前版本的jqGrid中实现您的需求非常容易,但代码使用了一些内部网格结构。因此,您应该验证在下一个版本中是否也能使用相同的技巧。resizeStop
回调的代码可以如下:
resizeStop: function () {
$(this.bDiv).find('>div:first>table.ui-jqgrid-btable:first')
.jqGrid('setGridWidth', this.newWidth);
}
演示演示了它的工作原理。
jqGrid的通用解决方案的复杂性更高,因为有时需要保持指定的网格宽度。我的观点如下:如果用户在网格初始化(创建)期间指定width
选项,那么他希望保持宽度。另一方面,如果在创建网格的过程中没有指定width
选项,则希望(如您所愿)根据所有列的宽度之和计算网格的总宽度。如果某些列宽将被更改,则网格宽度也应进行调整(重新计算)。问题只是在创建网格期间,原始的空width
选项将被覆盖。我的建议是在创建网格期间,将width
选项的原始值保存在widthOrg
选项中。因此,可以测试width
选项的原始值,并在列调整大小后选择网格调整大小的最佳行为。
更新:在jqGrid代码的注释和调试中与您进行了一些讨论后,我希望我找到了独立于shrinkToFit
参数值的正确工作的解决方案。解决方案包括将resizeStop
的代码更改为以下
resizeStop: function () {
var $grid = $(this.bDiv).find('>div:first>table.ui-jqgrid-btable:first'),
shrinkToFit = $grid.jqGrid('getGridParam', 'shrinkToFit');
$grid.jqGrid('setGridWidth', this.newWidth, shrinkToFit);
}
以及jqGrid内部CCD_ 12方法的两条线的改变。这是线路的第一次更换
cw = this.widthOrg? this.widthOrg: parseInt(this.width,10);
至
cw = this.widthOrg && $t.p.shrinkToFit ? this.widthOrg: parseInt(this.width,10);
以及更换另一条线路
$($t).jqGrid("setGridWidth",$t.p.shrinkToFit === true ? $t.p.tblwidth : $t.p.width );
至
$($t).jqGrid("setGridWidth", $t.p.tblwidth);
您可以在这里获得jqGrid的修改版本。第一个演示使用带有shrinkToFit: true
的代码,第二个演示使用相同的代码,但没有选项shrinkToFit: true
。
第二天,我想知道如何在创建时使用jqGrid的固定width
选项的情况下进行修复,并将在trirand论坛上发布我的建议。
如果您想使用jqGrid的最小化版本,您可以自己最小化它,也可以使用原始jqGrid最小化版本,并仅覆盖$.jgrid.extend
的showHideCol
方法。请参阅演示。
更新:在jqGrid的后续版本中更改this
的值后,应该将resizeStop
回调的上述代码更改为以下内容:
resizeStop: function () {
var $self = $(this),
shrinkToFit = $self.jqGrid("getGridParam", "shrinkToFit");
$self.jqGrid("setGridWidth", this.grid.newWidth, shrinkToFit);
}
我制作了一个函数
var grid_setAutoWidth = function() {
var columnas = $(this).jqGrid('getGridParam', 'colModel');
var anchoTotal = 0;
for (var i = 0; columnas[i]; i++) {
anchoTotal += columnas[i].width;
}
anchoTotal += 50;
$(this).jqGrid('setGridWidth', anchoTotal);
};
然后,在网格参数中
shrinkToFit: false,
loadComplete: grid_setAutoWidth,
resizeStop: grid_setAutoWidth,
我认为这是最简单的方法
- 如何在浏览器宽度/高度变化时动态调整图像网格的大小
- 检测角度 ui 网格中的列大小调整事件
- 是否有一个JS库可以让我在网格中制作可拖动和可调整大小的磁贴,就像在iPhoto Journal中一样
- 如何在网格中为“完全出血”调整图像大小
- 调整列大小时,我将如何获取网格面板的列宽
- 剑道网格列宽调整不正确如果我使用列菜单
- 具有自动调整行高的 JavaScript 数据网格
- Extjs 3.3.1 FieldSet 中带有布局适合和网格,不会在调整窗口大小时调整网格大小
- 尝试检测网格视图的哪一行处于编辑模式,然后在选中复选框字段时调整文本框
- 如何在 Ext js 4.0 中调整网格大小时调用函数
- 如何创建一个网格,其中可变数量的正方形会自动调整大小以适应空间
- JQGrid:调整列大小后调整网格宽度
- 调整窗口大小时,jQuery Masonry布局正在崩溃——流畅的无缝照片网格
- ExtJs 4网格面板在窗口调整大小时没有正确调整大小
- 需要帮助使用CSS调整图像网格的大小
- 任务根据小时时间轴网格进行相应调整
- 调整网格和多个高图的大小和定位问题
- 如何根据范围内的窗口大小调整网格块的大小
- 网站调整网格布局
- 如何在视口中调整网格并让网格显示垂直滚动条