在 Ag Grid 中禁用多列过滤器

Posted

技术标签:

【中文标题】在 Ag Grid 中禁用多列过滤器【英文标题】:Disable multiple column filter in Ag Grid 【发布时间】:2021-09-11 15:08:11 【问题描述】:

我们怎样才能一次只启用单列过滤器?

在下面的代码中,我们可以应用多列过滤器,但我只想允许一个过滤器并重置所有其他以前的过滤器。

'use strict';

import React,  useState  from 'react';
import  render  from 'react-dom';
import  AgGridReact, AgGridColumn  from 'ag-grid-react';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';

const GridExample = () => 
  const [gridApi, setGridApi] = useState(null);
  const [gridColumnApi, setGridColumnApi] = useState(null);
  const [rowData, setRowData] = useState(null);

  const onGridReady = (params) => 
    setGridApi(params.api);
    setGridColumnApi(params.columnApi);

    const updateData = (data) => 
      setRowData(data);
    ;

    fetch('https://www.ag-grid.com/example-assets/olympic-winners.json')
      .then((resp) => resp.json())
      .then((data) => updateData(data));
  ;

  return (
    <div style= width: '100%', height: '100%' >
      <div
        id="myGrid"
        style=
          height: '100%',
          width: '100%',
        
        className="ag-theme-alpine"
      >
        <AgGridReact
          defaultColDef=
            flex: 1,
            minWidth: 150,
            filter: true,
          
          onGridReady=onGridReady
          rowData=rowData
        >
          <AgGridColumn field="athlete" />
          <AgGridColumn
            field="age"
            filter="agNumberColumnFilter"
            maxWidth=100
          />
          <AgGridColumn field="country" />
          <AgGridColumn field="year" maxWidth=100 />
          <AgGridColumn
            field="date"
            filter="agDateColumnFilter"
            filterParams=filterParams
          />
          <AgGridColumn field="sport" />
          <AgGridColumn field="gold" filter="agNumberColumnFilter" />
          <AgGridColumn field="silver" filter="agNumberColumnFilter" />
          <AgGridColumn field="bronze" filter="agNumberColumnFilter" />
          <AgGridColumn field="total" filter=false />
        </AgGridReact>
      </div>
    </div>
  );
;

var filterParams = 
  comparator: function (filterLocalDateAtMidnight, cellValue) 
    var dateAsString = cellValue;
    if (dateAsString == null) return -1;
    var dateParts = dateAsString.split('/');
    var cellDate = new Date(
      Number(dateParts[2]),
      Number(dateParts[1]) - 1,
      Number(dateParts[0])
    );
    if (filterLocalDateAtMidnight.getTime() === cellDate.getTime()) 
      return 0;
    
    if (cellDate < filterLocalDateAtMidnight) 
      return -1;
    
    if (cellDate > filterLocalDateAtMidnight) 
      return 1;
    
  ,
  browserDatePicker: true,
;

render(<GridExample></GridExample>, document.querySelector('#root'));

在这里,您将获得完整的 ag 网格示例。 https://www.ag-grid.com/react-grid/filtering/#example-simple-filters

查看attached image 供您参考。

帮助我应用这个逻辑。 谢谢!

【问题讨论】:

【参考方案1】:

您可以将 onClick 处理程序附加到重置所有先前过滤器的所有 AgGridColumns。

function resetFilters() 
    gridOptions.api.setFilterModel(null);


<AgGridColumn onClick=resetFilters field="bronze" filter="agNumberColumnFilter" />

这里是重置过滤器方法的文档:https://www.ag-grid.com/javascript-grid/filter-api/#reset-all-filters

【讨论】:

以上是关于在 Ag Grid 中禁用多列过滤器的主要内容,如果未能解决你的问题,请参考以下文章

以角度将列标题过滤器保存在 ag-grid 中

setFilter 工具提示未显示在过滤器列表 ag-grid 中

在 Ag Grid 中隐藏过滤器行

Ag-grid 隐藏过滤列

Ag-grid 过滤器菜单自动调整大小

ag-grid:在过滤器测试功能中访问行数据