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',
}