首页 > 解决方案 > aggrid 服务器端分页“当网格位于绘图行的中间时,无法让网格绘制行”

问题描述

我有一个这样的 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 8aggrid 22.1.1

标签: angularag-gridinfinite

解决方案


如@Vincemt Chen 评论中所述

感谢您的回答。这对我来说是一个 valueFormatter 问题。如果我从列定义中删除 valueFormatter,一切正常。当我检查 chrome 控制台时,我看到格式化程序函数未定义单元格值。我不知道如何修复它,所以我删除了所有 valueFormatter。在那之后一切都很好。

它也发生在我身上,所以我没有删除valueFormatter哪个有用,而是添加了检查 if params.valueis undefined。例如:

{
    headerName: "first cell",
    field: "first field",
    valueFormatter: (params) => {
        if(!params.value) return 'ERROR';

        ...your original code...
    }
}

推荐阅读