为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 agGrid 中更新 defaultColDef

如何在 agGrid 中更新 defaultColDef

江户川乱折腾 2023-03-24 17:10:32
我有一个带有按钮切换的自定义列过滤器。默认情况下,列过滤器设置为 false。当我单击按钮时,通过设置 floatingFilter: true 来切换列过滤器。当单击按钮期间 floatingFilter 变为 true 时,它不显示过滤器。而如果我们当时默认将 floatingFilter 设置为 true,则它会显示过滤器,如果我们切换按钮以显示/隐藏 floatingFilter,它会按预期工作。我可以知道如何在 ag-grid 中动态更新 defaultColDef 以使 floatingFilter 在按钮单击期间为真。默认ColDef:this.defaultColumnDefs = {      suppressMenu: true,      suppressMovable: true,      sortable: true,      resizable: true,      floatingFilter: this.hasFloatingFilter    };切换过滤器:toggleFloatingFilter() {    this.hasFloatingFilter = !this.hasFloatingFilter;    this.clearSelectedRows();    this.gridApi.setRowData(this.rowData);    this.defaultColumnDefs = {...this.defaultColumnDefs, floatingFilter: this.hasFloatingFilter};    if (!this.hasFloatingFilter) {      this.gridApi.setFilterModel(null);      this.loadData();    }    setTimeout(() => {      this.gridApi.refreshHeader();    }, 0);  }网格HTML:<app-data-grid          [columnDefs]="columnDefs"          [defaultColDef]="defaultColumnDefs"          [overlayNoRowsTemplate]="overlayNoRowsTemplate"          [frameworkComponents]="frameworkComponents"          [rowData]="rowData"          [hasMultipleRows]="rowSelection"          [hasRowAnimation]="hasRowAnimation"          [multiSortKey]="multiSortKey"          (rowDataChanged)="onRowDataChanged()"          (selectionChanged)="onSelectionChanged()"          (rowClicked)="gotoDetailView($event)"          (sortChanged)="onSortChanged($event)"          (columnResized)="onColumnResized()"          (gridReady)="OnGridReady($event)"        >        </app-data-grid>示例:https://plnkr.co/edit/w2UDNd4u657tdr0Q? preview当前行为 在按钮点击期间不显示浮动过滤器(当 flaotingFilter 默认为 false 并动态更改为 true 时)预期行为 它应该在以下情况下显示浮动过滤器农业网格版本:23.2.1
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您需要使用 columnDefs 而不是 defaultColDef 来执行此操作。插件链接

showFilter() {  

    /*  

    this.defaultColDef = {...this.defaultColDef, floatingFilter: true};


    setTimeout(() => {

      this.gridApi.refreshHeader();

    }, 0);*/

     var columnDefs = this.gridApi.getColumnDefs();

    columnDefs.forEach(function (colDef, index) {

    colDef.floatingFilter = true;

  });

  this.gridApi.setColumnDefs(columnDefs);

  }

AG 网格在渲染网格时合并defaultColDefs,colDefs然后colDefs在方法中使用对象setupFloatingFilter,因此在 defaultColDefs 中设置值是没有用的。


调用gridApi.setColumnDefs调用HeaderContainer.prototype.init因此呈现您的过滤器组件,而调用refreshHeader内部调用gridPanel.setHeaderAndFloatingHeights,headerRootComp.refreshHeader但没有调用init将呈现您的过滤器组件的函数。


查看完整回答
反对 回复 2023-03-24
?
慕容3067478

TA贡献1773条经验 获得超3个赞

要更新 agGrid 中的 defaultColDef,您可以使用 setDefaultColDefgridApi 中的方法传递全新的 colDef。并且不要忘记刷新所有标题。


this.gridApi.api.setDefaultColDef({

        ...this.defaultColDef,

        floatingFilter: true

    });

    this.gridApi.api.refreshHeader();

希望这会有所帮助


查看完整回答
反对 回复 2023-03-24
  • 2 回答
  • 0 关注
  • 368 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号