我希望 slickgrid 根据最宽的内容或标题文本自动调整列的大小 - 以更宽者为准。简单来说,我希望它在列大小调整时模拟常规 HTML 表格的默认行为。我怎样才能在 slickgrid 中做到这一点?
7 回答
构建选项时,您可以使用forceFitColumns: true
var options = {
enableCellNavigation: true,
forceFitColumns: true
};
这将使列填充网格 div 的整个宽度。
OP 正在寻找要增长的列以匹配其内容。grid.autosizeColumns()
生长细胞以适应父容器,这不是一回事。
我已经添加了这个功能,它就像你想象的那样手动。您遍历显示的单元格并测量每个单元格,保存最宽的单元格并使用该宽度来设置列的宽度。SlickGrid 使您可以很好地访问视口中的单元格,因此效果很好。
测量算法是您的重大决定。正如@jay 建议的那样,您可以将内容移出屏幕并对其进行测量。这可行,但它是最慢的方法,因为它需要重新绘制插入,并在删除时重新绘制。可能有优化的方法。我采用的解决方案是测量字母表中每个字母的宽度,以及我们遇到的其他印刷字符的宽度,并将它们相加以生成宽度。是的,这听起来很荒谬。它有很多限制:字体大小必须相同,不支持图像,不能有任何换行,等等。如果你能忍受这些约束,你可以计算一个巨大的网格视口的大小<5ms
,因为字符宽度只测量一次。
获得列的大小后,您可以使用 将它们分配给您的列grid.setColumns()
。
Slickgrid 将不支持基于数据的列自动调整大小。您需要编写插件或 fork slickgrid 核心进行修改。
这是我创建的插件来处理 slickgrid 自动大小的链接 https://github.com/naresh-n/slickgrid-column-data-autosize
我在绘制网格后添加了它,它工作正常。
$(window).resize(function() {
var cols = grid.getColumns();
grid.setColumns(cols);
})
您应该能够调用autosizeColumns()
网格对象的方法。
grid.autosizeColumns();
对 Naresh 的https://github.com/naresh-n/slickgrid-column-data-autosize做这个简单的调整,在init
函数上:
- 添加
$container.ready(resizeAllColumns);
到初始化函数。
这确保了列在初始加载时自动调整大小
将文本插入屏幕外元素并检索元素的宽度。这就是 excanvas 用来测量文本的方法。使用它来设置列的宽度,因为它需要一个像素值。