javascript Ag Grid Column Grouping不适用于Infinite RowModalType

ee7vknir  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(83)

我使用的是“企业”版本的Ag-Grid,配置如下,但行分组不起作用,我为rowGroup设置为true的列没有显示为Group。

<AgGridReact 
    rowSelection="multiple"
    groupSelectsChildren={true}
    groupDisplayType="singleColumn"
    rowModelType="infinite"
    autoGroupColumnDef={

      return {
    headerName: "Resource",
    fieldName:"Name",
    cellRenderer: 'agGroupCellRenderer'
}
    }
    onGridReady={params => {
        params.api.setDataSource("my data source here");
    }
/>

如果我删除分组,分页与服务器端呈现工作正常。

62o28rlo

62o28rlo1#

official documentation page中,建议使用服务器端行模型而不是无限行模型,因为它提供了更多功能的相同功能。
他们还建议您使用无限行模型,如果你想显示一个大的,平面**(不分组)**列表的数据。
在同样的link中,他们还说:服务器端行模型建立在无限行模型之上。除了在用户向下滚动时延迟加载数据之外,它还允许通过服务器端分组和聚合延迟加载分组数据。
此外
聚合和分组在无限滚动中不可用。这是因为这样做需要网格知道整个数据集,这在使用无限行模型时是不可能的。如果您需要对大型数据集进行聚合和/或分组,请检查服务器端行模型以在服务器端进行聚合。
我看到你有一个组列,在这种情况下我会使用服务器端行模型。
下面是SSRM中使用分页进行分组的具体示例,您可以将其作为参考

'use strict';

import React, {
  useCallback,
  useMemo,
  useRef,
  useState,
  StrictMode,
} from 'react';
import { createRoot } from 'react-dom/client';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-enterprise';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';

const getServerSideDatasource = (server) => {
  return {
    getRows: (params) => {
      console.log('[Datasource] - rows requested by grid: ', params.request);
      var response = server.getData(params.request);
      // adding delay to simulate real server call
      setTimeout(function () {
        if (response.success) {
          // call the success callback
          params.success({
            rowData: response.rows,
            rowCount: response.lastRow,
          });
        } else {
          // inform the grid request failed
          params.fail();
        }
      }, 200);
    },
  };
};

const GridExample = () => {
  const containerStyle = useMemo(() => ({ width: '100%', height: '100%' }), []);
  const gridStyle = useMemo(() => ({ height: '100%', width: '100%' }), []);

  const [columnDefs, setColumnDefs] = useState([
    { field: 'country', rowGroup: true, hide: true },
    { field: 'athlete', minWidth: 190 },
    { field: 'gold', aggFunc: 'sum' },
    { field: 'silver', aggFunc: 'sum' },
    { field: 'bronze', aggFunc: 'sum' },
  ]);
  const defaultColDef = useMemo(() => {
    return {
      flex: 1,
      minWidth: 90,
      resizable: true,
      sortable: true,
    };
  }, []);
  const autoGroupColumnDef = useMemo(() => {
    return {
      flex: 1,
      minWidth: 180,
    };
  }, []);

  const onGridReady = useCallback((params) => {
    fetch('https://www.ag-grid.com/example-assets/olympic-winners.json')
      .then((resp) => resp.json())
      .then((data) => {
        // setup the fake server with entire dataset
        var fakeServer = new FakeServer(data);
        // create datasource with a reference to the fake server
        var datasource = getServerSideDatasource(fakeServer);
        // register the datasource with the grid
        params.api.setServerSideDatasource(datasource);
      });
  }, []);

  return (
    <div style={containerStyle}>
      <div style={gridStyle} className="ag-theme-alpine-dark">
        <AgGridReact
          columnDefs={columnDefs}
          defaultColDef={defaultColDef}
          autoGroupColumnDef={autoGroupColumnDef}
          rowModelType={'serverSide'}
          pagination={true}
          paginationAutoPageSize={true}
          suppressAggFuncInHeader={true}
          animateRows={true}
          onGridReady={onGridReady}
        />
      </div>
    </div>
  );
};

const root = createRoot(document.getElementById('root'));
root.render(
  <StrictMode>
    <GridExample />
  </StrictMode>
);

柱塞:https://plnkr.co/edit/dyKXE6lXT3vJa60p?preview

相关问题