Ag grid 当自定义单元渲染器组件内发生更改时,如何刷新ag网格?

Ag grid 当自定义单元渲染器组件内发生更改时,如何刷新ag网格?,ag-grid,ag-grid-angular,Ag Grid,Ag Grid Angular,在我的网格中,我有以下列: 如您所见,它有一个自定义单元渲染器。以下是它的定义: @Component({ selector: "app-generic-specific-renderers", template: ` <hr /> <select class="form-control" id='0' (change)="updateChosenValue($event.target); refre

在我的网格中,我有以下列:

如您所见,它有一个自定义单元渲染器。以下是它的定义:

 @Component({
  selector: "app-generic-specific-renderers",
  template: `
    <hr />
    <select class="form-control" id='0' (change)="updateChosenValue($event.target); refresh(params)">
      <option >{{ selectedOptions[params.node.id] }}</option>
      <option >Specific</option>
      <option >Generic</option>
    </select>
    <hr />
  `
})
export class GenericSpecificCellRenderersComponent implements OnInit {
  updateChosenValue(event) {
    if (event.value==='Specific'){
      this.selectedOptions[this.params.node.id]='Specific'
    }
    else if (event.value==='Generic'){
      this.selectedOptions[this.params.node.id]='Generic'
     }
    }
  selectedOptions:string[]=[];
  constructor(private controlAssessmentData: ControlAssessmentService) {
    this.controlAssessmentData.currentSelectedOptions.subscribe(
      receivedSelectedOptions =>
        (this.selectedOptions = receivedSelectedOptions)
    );
  }
  ngOnInit() {}
  public params: any;
  public gridApi:any;

  // called on init
  agInit(params: any): void {
    this.params = params;
    this.gridApi= params.api;
  }
  // called when the cell is refreshed
  refresh(params: any): boolean {
    this.params = params;
    this.gridApi.refreshCells()
    console.log('this.params: ', this.params);
    return true;
  }
}
@组件({
选择器:“应用程序通用特定渲染器”,
模板:`

{{selectedOptions[params.node.id]} 具体的 通用的
` }) 导出类GenericSpecificCellRendersComponent实现OnInit{ updateChosenValue(事件){ if(event.value==='Specific'){ this.selectedOptions[this.params.node.id]=“特定” } else if(event.value==='Generic'){ this.selectedOptions[this.params.node.id]=“Generic” } } 所选选项:字符串[]=[]; 建造商(私人控制评估数据:控制评估服务){ 此.controlAssessmentData.currentSelectedOptions.subscribe( receivedSelectedOptions=> (this.selectedOptions=receivedSelectedOptions) ); } ngOnInit(){} 公共参数:任何; 公共网格API:任何; //在初始化时调用 agInit(参数:任意):无效{ this.params=params; this.gridApi=params.api; } //刷新单元格时调用 刷新(参数:任意):布尔值{ this.params=params; this.gridApi.refreshCells() log('this.params:',this.params); 返回true; } }
每次用户从下拉列表中选择选项时,我都希望刷新网格。
我认为我的代码应该可以工作,因为我在刷新定义它的网格时使用了相同的逻辑。
但事实并非如此。
知道为什么吗?也许我可以怎么解决呢?

谢谢大家!

组件渲染器上的刷新调用“mycomponentRenderer”,例如:

 const rowNode = this.gridApi.getDisplayedRowAtIndex(1);
 rowNode.setDataValue('mycolumn', 'myvalue');
 this.gridApi.refreshCells({ columns: ['mycolumn'] });
在“字段”属性的列配置期间,“mycolumn”必须放入columnDefs

html:

更改选项时(不是像现在那样在
refesh()
中),请运行api.refreshCells,并将选项force设置为true<代码>api.refreshCells({force:true})


如果可以,也可以在调用中放置所需的行/列,以避免重新绘制整个网格。

导致刷新的事件:调用api.refreshCells()以通知网格数据已更改(请参阅刷新)。刷新单元格:api.refreshCells(cellRefreshParams)-获取网格以刷新所有单元格。更改检测将仅用于刷新显示单元格值与实际值不同步的单元格。如果将cellRenderer与刷新方法一起使用,将调用刷新方法。;
 const rowNode = this.gridApi.getDisplayedRowAtIndex(1);
 rowNode.setDataValue('mycolumn', 'myvalue');
 this.gridApi.refreshCells({ columns: ['mycolumn'] });
html: <ag-grid-angular
        [rowData]="items"
        [columnDefs]="columnDefs"
        [defaultColDef]="defaultColDef"
        (gridReady)="onGridReady($event)"
        [frameworkComponents]="frameworkComponents">
</ag-grid-angular>
 this.columnDef[0] = {
            field: 'mycolumn',
            headerName: 'mycolumnHeader',
            cellRenderer: 'mycomponentRenderer',
}