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

如何在无数据状态下显示ag-grid的行列结构?

How to Keep ag-Grid Visible with Rows & Columns When No Data Exists

Hey there! I’ve dealt with this exact issue in ag-Grid projects before—nothing’s more frustrating than your grid collapsing entirely when there’s no data to show. Here are two reliable approaches to keep your grid’s structure (with visible rows and columns) intact:

Approach 1: Add Empty Rows to Your Data Source

The simplest way to maintain the grid’s layout is to inject a set number of empty rows when your actual data is empty. This makes ag-Grid render the rows just like it would with real data, keeping all columns visible.

Example Code (Vanilla JS):

// Fetch your actual data (replace with your data-fetching logic)
const fetchData = async () => {
  const response = await fetch('/your-data-endpoint');
  const rowData = await response.json();

  // If no data exists, create 3 empty rows (adjust the number as needed)
  if (!rowData || rowData.length === 0) {
    return Array(3).fill({}); // Empty objects will render blank cells
  }
  
  return rowData;
};

// Initialize the grid with the processed data
const gridOptions = {
  columnDefs: [
    { field: 'username', headerName: 'Username' },
    { field: 'role', headerName: 'Role' },
    { field: 'joinDate', headerName: 'Join Date' }
  ],
  rowData: await fetchData()
};

// Mount the grid
new agGrid.Grid(document.getElementById('myGrid'), gridOptions);

Tips for This Approach:

  • If you want placeholder text in empty cells (instead of blank), define default values in the empty objects:
    Array(3).fill({ username: '-', role: '-', joinDate: '-' })
    
  • For framework-specific setups (React/Vue/Angular), integrate this logic into your component’s state management (e.g., React’s useState or Vue’s data).

Approach 2: Customize the No-Rows Overlay (Without Hiding Grid Structure)

If you don’t want to inject dummy data, you can override ag-Grid’s default no-rows overlay to sit above the grid’s column headers and empty row area, instead of replacing the entire grid.

Step 1: Create a Custom Overlay Component

const CustomNoRowsOverlay = () => {
  return `
    <div class="ag-custom-no-rows-overlay">
      <p>No data available right now—check back later!</p>
    </div>
  `;
};

Step 2: Style the Overlay to Avoid Covering Columns

Add CSS to make the overlay sit within the grid’s content area, so column headers and empty row slots remain visible:

.ag-custom-no-rows-overlay {
  position: absolute;
  top: 40px; /* Match your header height */
  left: 0;
  right: 0;
  text-align: center;
  padding: 20px;
  color: #666;
}

Step 3: Attach the Overlay to Your Grid

const gridOptions = {
  columnDefs: [...],
  rowData: [], // Empty data
  noRowsOverlayComponent: CustomNoRowsOverlay,
  minHeight: 250, // Set a minimum height to keep the grid from collapsing
  alwaysShowVerticalScroll: true // Optional: Keep scrollbar visible for consistency
};

Final Notes

  • Approach 1 is best if you want the grid to look identical to its populated state (just with empty rows).
  • Approach 2 works well if you want to display a message while preserving the grid’s frame.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:03