【问题标题】:Update columnDef's in agGrid without incrementing colIds更新AG网格中的ColumnDef而不递增Colid
【发布时间】:2020-08-10 18:46:39
【问题描述】:

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

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

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

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

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

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

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

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

  1. 第一种也是最好的方法:一种无需更新 columnDefs 的方法 改变 colIds

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

提前谢谢大家

【问题讨论】:

  • 为什么不为每一列定义自己的 colId?

标签: javascript grid ag-grid collapse columndefinition


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2020-10-13
    • 2017-09-26
    • 2013-02-23
    • 2020-08-19
    • 2019-04-06
    • 2020-06-22
    • 2020-02-21
    相关资源
    最近更新 更多