如何有条件地隐藏 ag 网格中的列

Posted

技术标签:

【中文标题】如何有条件地隐藏 ag 网格中的列【英文标题】:How to hide column in ag grid conditionally 【发布时间】:2021-12-05 06:03:25 【问题描述】:

在 columndef 我们创建列,但我们必须有条件地隐藏该列

columndefs
[
     field: action,
      hide: true ]

【问题讨论】:

你试过ngIf="!element.hide"吗?您可以将您的 html 和 ts 文件附加到问题中吗? 【参考方案1】:

您可以尝试使用gridApi接口并使用setColumnDefs()方法来实现。

const columndefs=[ field:action, hide: true, [..restfields]]
this.this.gridApi.setColumnDefs(columndefs);

请注意,在设置 columndefs 时,您需要再次提供所有列定义,您不能在隔离中这样做。

【讨论】:

【参考方案2】:

您需要迭代您的 columnDef 并检查您需要动态隐藏的列。参考下面的代码。

let obj = this.columndefs.find(
                o => o.field === 'action' // pass this dynamically 'action'
           );
 obj.hide = false; // Set to false

 // After set to false you need to make call setColumnDefs from gridApi
 this.gridApi.setColumnDefs(
      columndefs // pass your columnDef
 );

你会得到gridApi对象,在aggrid提供的onGridReady回调中。

public onGridReady(params) 
/**
* Function is called when grid is instantiated.
* @param params Ag grid params
*/
this.gridApi = params.api;
this.gridColumnApi = params.columnApi;

HTML 代码:

<ag-grid-angular class="ag-theme-alpine" [columnDefs]="columnDefs [gridOptions]="gridOptions" (gridReady)="onGridReady($event)"></ag-grid-angular>

【讨论】:

【参考方案3】:

在挂载后隐藏单列(在“网格就绪”之后),无需完全重新加载:

gridOptions.columnApi.hideColumn(colId: any, hide: any)

hideColumns 相同。如果colId 未定义,expect(column.colId).to.equal(colDef.field)

或者在挂载后重置ColumnState

const savedState = columnApi.getColumnState();
savedState.find(x => x.colId === myColDef.field).hide = true;
columnApi.setColumnState(savedState);

或者:

gridOptions.api.setColumnDefs(columndefs)

或将columnDefs 与 vue/angular/etc 绑定,然后更新 columnDefs。

<ag-grid-angular [columnDefs]="columnDefs" ...
<ag-grid-vue :columnDefs="columnDefs" ...

【讨论】:

以上是关于如何有条件地隐藏 ag 网格中的列的主要内容,如果未能解决你的问题,请参考以下文章

如何根据列中的某个值为 ag 网格中的整行提供背景颜色?

有没有办法在 ag 网格中的 2 个单元格渲染器之间传递数据?

extjs 4 如何更改网格上显示的列下拉列表的顺序

使用默认值在 ag 网格上添加行

有条件地隐藏 v-data-table 中的列(Vuetify)

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列