0

我有各种请求,我的 agGrid 中的 columnDefs 必须更改,因为没有可用于相应属性的 API 方法(例如,将列过滤器和类型更改为数字时)。

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

这工作得很好,除了这样一个事实,这显然会从头开始重新创建列,因此为它们分配新的(增加的)colId。例如,列“first”在 colDef 更新之前具有 colId:0,在更新之后具有 colId:1。

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

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

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

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

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

  1. 第一种也是最好的方法:一种在不改变 colIds 的情况下更新 columnDefs 的方法

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

非常感谢大家提前

4

1 回答 1

1

正如@Pratik_Bhat 提到的,您可以在 colDef 中指定 colId。

此外,我发现在新 colDefs 中使用与旧 colDefs 中相同的 colId 重新定义列时,ag-grid 将在 colId 中附加一个下划线和一个数字。

因此,如果您有一个 colId 为“columnA”的 colDef,并且您使用另一组列的 colId 为“columnA”的列重新定义列,您将得到一个“columnA”和一个“columnA_1” .

您只会在网格中看到新列,但您的新列会意外地具有类似于“columnA_1”的 colId。如果您依赖于知道 colId,这将导致您的代码中断。

幸运的是,有一个简单的答案。在分配新的 colDefs 之前,分配一个空数组。这似乎“清除”了旧的 colDefs。紧接着,分配你真正的 colDefs。然后,您将获得您期望的 colId。

于 2020-04-28T05:03:04.660 回答