You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置agGrid分组实现手风琴式效果:仅单组可展开

实现agGrid手风琴式分组交互效果

当然可以实现!agGrid本身没有内置的手风琴式分组开关,但我们可以通过监听分组展开事件,手动控制分组的展开状态来达成同一时间仅一个分组展开的效果。下面是具体的实现步骤和代码示例:

核心思路

利用agGrid提供的onRowGroupOpened事件,在某个分组被展开时,遍历当前所有已展开的分组节点,将除当前分组外的其他分组全部收起,从而模拟手风琴的交互逻辑。

具体配置步骤

  • 第一步:启用分组功能
    首先确保你的agGrid已经开启了分组支持,比如通过列配置标记可分组字段,或者启用分组面板:

    const gridOptions = {
      // 启用分组面板,允许拖拽列到面板进行分组
      rowGroupPanelShow: 'always',
      // 示例列配置,将"category"列设为可分组
      columnDefs: [
        { field: 'category', rowGroup: true, hide: true },
        { field: 'productName' },
        { field: 'price' }
      ],
      // 其他基础配置...
    };
    
  • 第二步:添加分组展开事件监听
    在gridOptions中配置onRowGroupOpened事件回调,处理手风琴逻辑:

    const gridOptions = {
      // 其他配置...
      onRowGroupOpened: (params) => {
        // 仅当分组被展开时执行逻辑
        if (params.opened) {
          // 获取当前所有展开的分组节点
          const expandedNodes = params.api.getModel().getRootNodes().filter(node => node.expanded);
          // 遍历展开节点,收起非当前的分组
          expandedNodes.forEach(node => {
            if (node !== params.node) {
              params.api.setRowNodeExpanded(node, false);
            }
          });
        }
      }
    };
    

额外注意事项

  • 多层分组场景:如果你的grid使用了多层分组,上面的代码只会处理根层级的分组。如果需要针对同一层级的分组实现手风琴效果,需要在回调中判断节点的层级,比如通过node.level来筛选同层级的节点。
  • 服务器端分组:如果使用了服务器端分组(Server-Side Row Model),需要确保你能获取到所有分组节点的状态,可能需要结合服务器返回的分组数据来调整收起逻辑。
  • 性能优化:如果数据量很大,遍历所有根节点可能有性能损耗,可以考虑缓存已展开的节点,减少重复遍历。

内容的提问来源于stack exchange,提问作者dragonfly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:19:10