当自定义 Cell Renderer 组件内发生更改时,如何刷新 ag-grid?

Ahm*_*rib 3 ag-grid ag-grid-angular

在我的网格中,我有这个专栏:
在此处输入图片说明

  {
      headerName: "Generic/Specific",
      field: "genericspecific",
      id: "6",
      cellRenderer:'genericSpecificCellRenderersComponent',
      cellStyle: params => {
        const colors: string[] = ["red", "orange"];
        const genericSpecific: string[] = ["Generic", "Specific"];
        return {
          "background-color": colors[genericSpecific.indexOf(this.selectedOptions[params.node.id])]
        };
      }
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,它有一个自定义的 Cell Renderer。这是它的定义:

 @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;
  }
}
Run Code Online (Sandbox Code Playgroud)

每次用户从下拉列表中选择一个选项时,我都想刷新网格。
我认为我的代码应该可以工作,因为我在刷新定义它的网格时使用了相同的逻辑。
然而,它没有。
知道为什么吗?也许我该如何解决?
谢谢!

Spi*_*ynn 5

当一个选项发生变化时(不像refesh()你现在那样),运行 api.refreshCells 并将选项 force 设置为 true。api.refreshCells({ force: true });

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


小智 1

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

 const rowNode = this.gridApi.getDisplayedRowAtIndex(1);
 rowNode.setDataValue('mycolumn', 'myvalue');
 this.gridApi.refreshCells({ columns: ['mycolumn'] });
Run Code Online (Sandbox Code Playgroud)

和“mycolumn”必须在“ field ”属性中的列配置期间放入columnDefs 。

html:

html: <ag-grid-angular
        [rowData]="items"
        [columnDefs]="columnDefs"
        [defaultColDef]="defaultColDef"
        (gridReady)="onGridReady($event)"
        [frameworkComponents]="frameworkComponents">
</ag-grid-angular>
Run Code Online (Sandbox Code Playgroud)

TS:

 this.columnDef[0] = {
            field: 'mycolumn',
            headerName: 'mycolumnHeader',
            cellRenderer: 'mycomponentRenderer',
}
Run Code Online (Sandbox Code Playgroud)