ag 网格服务器端分页“当网格位于绘制行的中间时,无法让网格绘制行”
Posted
技术标签:
【中文标题】ag 网格服务器端分页“当网格位于绘制行的中间时,无法让网格绘制行”【英文标题】:aggrid server side paging 'cannot get grid to draw rows when it is in the middle of drawing rows' 【发布时间】:2020-06-28 03:51:03 【问题描述】:我有一个这样的 agggrid 组件:
private gridOptions =
columnDefs: this.columnDefs,
frameworkComponents: buttonRenderer: ButtonRenderer,
pagination: true,
paginationPageSize: 20,
cacheBlockSize: 20,
// server side paging
rowModelType: 'infinite',
datasource: this.dataSource
;
private dataSource: IDatasource =
getRows: (params: IGetRowsParams) =>
var query = startrow: params.startRow,
endrow: params.endRow,
company_name: this.companyName,
company_address: this.companyAddress,
company_capital: this.companyCapital
;
this.http.post(environment.api_url + "/register/search",query).subscribe((results:any) =>
params.successCallback(results.data, results.totalRecords);
this.gridApi.refresh();
);
;
aggrid 首次加载时,正常显示。如果我按下一页,我会收到此错误:
ERROR Error: "ag-Grid: cannot get grid to draw rows when it is in the middle
of drawing rows. Your code probably called a grid API method while the grid
was in the render stage. To overcome this, put the API call into a timeout,
eg instead of api.refreshView(), call setTimeout(function()
api.refreshView(),0). To see what part of your code that caused the
refresh check this stacktrace."
有什么例子可以参考吗?我四处搜寻,但没有这个似乎每个人都做得很好 问题。
顺便说一句:我正在使用angular 8
,aggrid 22.1.1
【问题讨论】:
我猜你不应该在调用successCallback之后调用网格的refresh()方法,这可能也触发了刷新。如果您确实需要调用 refresh(),请尝试在 setTimeout() 中调用 感谢您的回答。这对我来说是一个 valueFormatter 问题。如果我从列定义中删除 valueFormatter,一切正常。当我检查 chrome 控制台时,我看到格式化程序函数未定义单元格值。我不知道如何修复它,所以我删除了所有 valueFormatter。之后一切正常。 一个提示 - 我发现组件暴露给网格的函数(valueGetters、valueSetters、valueFormatters 等)必须是 Lambda(“胖箭头函数”),而不仅仅是组件的普通方法。 Lambda 绑定了“this”,而普通方法没有。 我在使用 agGrid 24.1 时也遇到了这个问题,而且我的 Angular 代码没有任何 valueFormatter 或对 refresh() 的调用。我有一个带有两级细节网格的主网格,如果我只扩展/收缩几行,在点击之间留下一个健康的停顿,我仍然会收到这个错误......我不知道为什么。 【参考方案1】:如@Vincemt Chen 评论中所述
感谢您的回答。这对我来说是一个 valueFormatter 问题。如果我从列定义中删除 valueFormatter,一切正常。当我检查 chrome 控制台时,我看到格式化程序函数未定义单元格值。我不知道如何修复它,所以我删除了所有 valueFormatter。之后一切正常。
这也发生在我身上,所以我没有删除有用的valueFormatter
,而是添加了检查params.value
是否为undefined
。例如:
headerName: "first cell",
field: "first field",
valueFormatter: (params) =>
if(!params.value) return 'ERROR';
...your original code...
【讨论】:
以上是关于ag 网格服务器端分页“当网格位于绘制行的中间时,无法让网格绘制行”的主要内容,如果未能解决你的问题,请参考以下文章
ag-grid-community:服务器端分页的无限行模型,社区免费版 agGrid - 不像服务器端分页那样工作
具有无限 rowModelType 问题的 AG Grid 26.0.0 Angular 12.2 服务器端分页