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

Ag Grid Angular主明细网格:无数据时隐藏二级/三级嵌套网格

解决Ag Grid多级主明细网格无数据时隐藏子网格的问题

方法1:通过getDetailRowData判断数据并控制展开状态

在获取子层级数据的回调中,先检查数据是否为空,若为空则设置当前节点为收起状态,同时返回空数据集合,避免子网格渲染:

修改二级网格的getDetailRowData:

getDetailRowData: (params) => {
  const childData = params.data.States;
  if (!childData || childData.length === 0) {
    params.node.setExpanded(false);
    params.successCallback([]);
    return;
  }
  params.successCallback(childData);
}

同理修改三级网格的getDetailRowData:

getDetailRowData: (params) => {
  const childData = params.data.Regions;
  if (!childData || childData.length === 0) {
    params.node.setExpanded(false);
    params.successCallback([]);
    return;
  }
  params.successCallback(childData);
}

方法2:通过isRowMaster控制展开按钮显示

如果想连展开按钮都隐藏,可在各级网格的gridOptions中添加isRowMaster函数,判断当前行是否有有效子数据,无数据则不显示展开按钮:

二级网格的detailGridOptions配置示例:

detailGridOptions: {
  // 原有配置...
  isRowMaster: (dataItem) => {
    return dataItem.Regions && dataItem.Regions.length > 0;
  },
  // 原有配置...
}

三级网格的detailGridOptions配置示例:

detailGridOptions: {
  // 原有配置...
  isRowMaster: (dataItem) => {
    return dataItem.Regions && dataItem.Regions.length > 0;
  },
  // 原有配置...
}

方法3:自定义细节单元格渲染器(更灵活的控制)

如果需要完全隐藏无数据的子网格区域,可自定义细节渲染器,判断无数据时直接隐藏渲染容器:

// 自定义细节渲染器
function CustomDetailRenderer() {}
CustomDetailRenderer.prototype.init = function(params) {
  this.eGui = document.createElement('div');
  const childData = params.data.States; // 二级网格对应States,三级替换为Regions
  if (!childData || childData.length === 0) {
    this.eGui.style.display = 'none';
    return;
  }
  // 正常渲染子网格逻辑
  const gridDiv = document.createElement('div');
  this.eGui.appendChild(gridDiv);
  new agGrid.Grid(gridDiv, params.detailGridOptions);
  params.successCallback(childData);
};
CustomDetailRenderer.prototype.getGui = function() {
  return this.eGui;
};

之后在网格的frameworkComponents中注册该渲染器,并在detailCellRendererParams里指定detailCellRenderer: 'customDetailRenderer'即可。

整合后的完整配置示例

public detailCellRendererParams: any = {
  // level 2 grid options
  detailGridOptions: {
    headerHeight: 0,
    columnDefs: [
      { field: 'Name', editable: true, cellRenderer: 'agGroupCellRenderer' }
    ],
    defaultColDef: {
      flex: 1,
    },
    groupDefaultExpanded: 1,
    masterDetail: true,
    detailRowHeight: 240,
    isRowMaster: (dataItem) => {
      return dataItem.Regions && dataItem.Regions.length > 0;
    },
    detailCellRendererParams: {
      // level 3 grid options
      detailGridOptions: {
        headerHeight: 0,
        columnDefs: [
          { field: 'RegionName', editable: true, cellRenderer: 'agGroupCellRenderer' },
        ],
        defaultColDef: {
          flex: 1,
        },
      },
      getDetailRowData: (params) => {
        const regions = params.data.Regions;
        if (!regions || regions.length === 0) {
          params.node.setExpanded(false);
          params.successCallback([]);
          return;
        }
        params.successCallback(regions);
      },
    } as IDetailCellRendererParams,
  },
  getDetailRowData: (params) => {
    const states = params.data.States;
    if (!states || states.length === 0) {
      params.node.setExpanded(false);
      params.successCallback([]);
      return;
    }
    params.successCallback(states);
  },
} as IDetailCellRendererParams;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:50:00