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

Ag-grid降序排序时如何将文件夹固定至底部?

实现AG Grid名称降序时文件夹固定在底部的方案

嘿,刚好之前处理过类似的需求,这就给你捋清楚具体实现思路和代码!

你已经用到了postSort钩子,核心思路就是根据当前的排序方向,动态调整文件夹和报表的排序优先级:

  • 名称列升序时:文件夹排在报表前面,各自内部按名称升序排序
  • 名称列降序时:报表排在文件夹前面,各自内部按名称降序排序

具体代码实现

假设你的行数据里有isFolder字段用来区分文件夹/报表,name字段是名称列的绑定字段,那可以这样写postSort函数:

postSort: function(params) {
  // 先确认当前是按名称列触发的排序
  const nameSortConfig = params.sortModel.find(item => item.colId === 'name');
  if (!nameSortConfig) return;

  const sortDirection = nameSortConfig.sort;
  const allRows = params.nodes.map(node => node.data);

  // 把数据拆分为文件夹和报表两组
  const folderRows = allRows.filter(row => row.isFolder);
  const reportRows = allRows.filter(row => !row.isFolder);

  let sortedResult;
  if (sortDirection === 'asc') {
    // 升序:文件夹在前,各自按名称升序排列
    sortedResult = [
      ...folderRows.sort((a, b) => a.name.localeCompare(b.name)),
      ...reportRows.sort((a, b) => a.name.localeCompare(b.name))
    ];
  } else {
    // 降序:报表在前,各自按名称降序排列
    sortedResult = [
      ...reportRows.sort((a, b) => b.name.localeCompare(a.name)),
      ...folderRows.sort((a, b) => b.name.localeCompare(a.name))
    ];
  }

  // 将排序后的结果映射回网格节点,更新显示顺序
  params.nodes.forEach((node, index) => {
    node.setData(sortedResult[index]);
  });
}

关键细节说明

  1. 锁定排序列:先从sortModel中筛选出名称列的排序配置,确保只有按名称排序时才触发自定义逻辑
  2. 分组拆分:把行数据拆成文件夹和报表两个独立数组,避免混排干扰优先级
  3. 方向适配:升序/降序时调换两组的顺序,同时各自内部保持对应方向的名称排序
  4. 更新网格:通过node.setData将排序后的行数据重新绑定到节点,让网格渲染正确顺序

如果你的字段名不是isFolder或name,只需要替换成你实际使用的字段即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:01:43