Angular - ag-grid - 动态添加列

Posted

技术标签:

【中文标题】Angular - ag-grid - 动态添加列【英文标题】:Angular - ag-grid - add columns dynamically 【发布时间】:2019-03-01 07:11:27 【问题描述】:

我需要在 2 种情况下向我的 Ag-grid 添加一些列。其他情况我只需要基列。

所以在构造函数中我这样声明我的网格:

this.gridOption.columnDefs = [
  
        headerName: 'Admission date',
        field: 'admissionPlannedDate',
        cellRendererFramework: DateCellRendererComponent,
        cellRendererParams: (params) => 
          return (params.data.admissionPlannedDate ? dateFormat: 'dd.MM.yyyy - HH:mm' : dateFormat: ' ');
        ,
        cellStyle: function (params) 
          return (params.data.admissionPlannedDate < new Date() ? color: 'red' : );
        
      ,
      
        headerName: 'Lastname',
        field: 'lastName',
        cellStyle: function (params) 
          return (params.data.edsId === null ? color: 'orange' : );
        
        ,
      ,
      
        headerName: 'Sex',
        field: 'sex',
      ,
      
        headerName: 'Birthdate',
        field: 'birthDate',
        cellRendererFramework: DateCellRendererComponent,
        cellRendererParams: (params) => 
            return (params.data.birthDate ? dateFormat: 'dd.MM.yyyy' : dateFormat: ' ');
        ,
      ,
      
        headerName: 'Localisation',
        field: 'localisation',
      
];

然后在我的 ngOnInit 中,在某些情况下我需要将列添加到我的 ag-grid。

我尝试了以下方法:

 this.gridOption.columnDefs.push(
                
                  headerName: 'Block',
                  field: 'block',
                , 
                  headerName: 'SDS/Hosp',
                  field: 'sdsOrHosp'
                
              );
console.log(this.gridOption); //I see the new columns here so the add worked but i don't see them visual in my grid

也试过了

 this.gridOption.columnDefs.push( headerName: 'Bloc', field:'block');
 this.gridOption.columnDefs.push( headerName: 'SDS/Hosp', field:'SDSorHosp');

有人有想法吗? 谢谢

【问题讨论】:

【参考方案1】:

您不能只将新值推送到 columnDefs,我的意思是肯定可以,但在 ag-grid 的情况下,流程不像那样工作。

所以要实现你的目标(动态添加\删除columnDefs)你需要使用setColumnDefs(colDefs)方法

setColumnDefs(colDefs) 调用以将新的列定义设置到网格中。网格将重绘所有列标题,然后重绘所有行。

所以从逻辑上讲,您只需要创建新的列数组,然后调用this.gridOption.api.setColumnDefs(...)

【讨论】:

你知道我是否可以在 gridOption 2 others 列中添加 hide: true 然后在某些条件下设置 hide: false 吗? 是的,你可以这样做来设置隐藏属性【参考方案2】:

如果您要动态添加的列是固定的,并且您想根据某些条件隐藏/取消隐藏这些列,您可以使用带有回调的 Hide 属性。

隐藏:真

【讨论】:

当我在 this.gridOption.api.getColumnDef('key').hide = false 之后执行此操作时;它不起作用,该列仍然隐藏 对我来说这可能是最简单的方法,而不是动态添加/删除列

以上是关于Angular - ag-grid - 动态添加列的主要内容,如果未能解决你的问题,请参考以下文章

(ag-grid)动画动态添加的列

如何在ag-grid Angular中获取其他列单元格但同一行的值?

ag-grid angular 5 导出隐藏,列

Angular Grid ag-grid columnDefs 动态变化

在带有 Angular 6 的 ag-Grid 18.0 中的 cellValueChanged 事件之后设置对已编辑列的排序

ag-grid 中的动态列配置