如何在Highcharts中修改DataTable时保留DataGrid已调整的列宽?
解决Highcharts Dashboards中
setCell()重置列宽的问题 问题复现步骤
- 全局存储看板实例:
var theboard = Dashboards.board(...) - 手动调整任意列的宽度
- 调用
theboard.dataPool.connectors["synchro-data"].table.setCell("Vitamin A", 0, 0)更新单元格数据 - 观察到之前调整的列宽被重置
解决方案
要避免列宽被重置,核心是绕过setCell()触发的自动列宽重计算逻辑,以下是两种可行方法:
方法1:保存并恢复列宽
在更新单元格前后,手动保存当前列宽,更新完成后再恢复:
// 1. 获取目标datagrid组件并保存列宽 const gridComponent = theboard.components.get('datagrid'); // 替换为你的datagrid组件ID const savedWidths = gridComponent.table.columns.map(col => col.width); // 2. 执行单元格更新操作 theboard.dataPool.connectors["synchro-data"].table.setCell("Vitamin A", 0, 0); // 3. 恢复列宽并重绘表格 gridComponent.table.columns.forEach((col, idx) => { col.width = savedWidths[idx]; }); gridComponent.table.redraw();
方法2:禁用自动列宽计算
在初始化Datagrid时,关闭自动列宽计算并手动指定列宽,彻底避免自动重置:
Dashboards.board('container', { // ...其他全局配置 components: [{ type: 'Datagrid', id: 'datagrid', connector: 'synchro-data', options: { autoSizeColumns: false, // 禁用自动列宽计算 columns: [ { title: '营养成分', width: 180 }, { title: '值', width: 120 }, // ...根据实际列配置固定宽度 ] } }] });
原理说明
setCell()更新数据后会触发表格重绘,默认逻辑会重新计算列宽。通过手动保存恢复列宽,或者直接禁用自动列宽计算,就能保留用户手动调整后的列宽设置。

内容的提问来源于stack exchange,提问作者Neil C. Obremski
相关产品推荐
相关产品推荐

