更新agGrid中的columnDef,而不增加colIds

问题描述 投票:0回答:1

我有各种要求,必须更改agGrid中的columnDef,因为没有针对相应属性的API方法(例如,当将列过滤器和类型更改为数字时)。

在这种情况下,我目前正在构建一个新的columnDef并通过... api.setColumnDefs();进行设置。看来这是更新columnDefs的正确方法。直接访问网格的当前columnDefs属性将不起作用(至少不能刷新Grid才能接受更改)

这很有效,除了事实,这显然是从头开始重新创建列,因此为它们分配新的(递增的)colId。例如列“ first”在colDef更新之前具有colId:0,在更新之后具有colId:1。

现在,我也面临着保持列状态保持更改的要求,这种行为给我带来了一些挑战。由于getColumnState()和setColumnState()仅在colId与以前相同时才起作用,因此我需要添加自己的逻辑。

为此,我目前正在通过匹配headerNames来更新保存状态下的colId ...即使这不是很好,我现在也可以接受。

我当前的问题是,由于此信息未存储在colDef中,因此无法以这种方式保存列的折叠/展开状态。

rememberGroupStateWhenNewData:true也不起作用,因为colId被更改/增加。

我的问题可能以两种不同的方式解决

  1. 第一种也是最好的方法:一种不使用以下方法更新columnDefs的方法更改colIds

  2. 否则:保留组的方法手动折叠/展开状态

非常感谢大家

javascript grid ag-grid collapse columndefinition
1个回答
0
投票
[此外,我发现当在新colDefs中使用与旧colDefs中相同的colIds重新定义列时,ag-grid将在下划线和数字后附加到colId。

因此,如果您的colDef的colId为'columnA',并且用另一组列的colId为'columnA'的列重新定义了列,则最后将显示'columnA'和' columnA_1'。

您将仅在网格中看到新列,但是新列将意外地具有诸如'columnA_1'之类的colId。如果您依赖于知道colId,这将导致您的代码中断。

幸运的是,有一个简单的答案。在分配新的colDefs之前,分配一个空数组。这似乎可以“清除”旧的colDefs。之后,立即分配您的实际colDefs。然后,您将获得所需的colId。

© www.soinside.com 2019 - 2024. All rights reserved.