Angular ag grid valueGetter

Angular ag grid valueGetter

我正在尝试制作 ag 网格 table。基本上我有大约 8 列。其中 3 个是用户输入,其余只是基于一些方程式的数学计算。

我认为 valueGetter 将是放置它们(计算)的好地方,但是对于一个单元格,我需要从不同的行获取数据并且麻烦从那里开始。

这是我的列定义,字段 x 的 valueGetter 工作正常,因为它使用来自同一行的数据,但是对于字段 xixi 我必须从前一行获取数据.我尝试过使用 gridApi,但未定义。请帮忙

  columnDefs: ColDef[]=[
    {field: 'r', width:150, cellEditor: 'agRichSelectCellEditor'},
    {field: 'y', width:150, cellEditor: 'agRichSelectCellEditor'},
    {field: 'x', width:150, valueGetter: function (params) {
      return params.data.r * params.data.y;
    }},
    {field: 'xixi', width:150, valueGetter: function (params){
      if(params.node.rowIndex == 0) {return 0;}
      let indexBefore = params.node.rowIndex
      if(this.gridApi == undefined){return;}
      let dataBefore = this.gridApi.getDisplayedRowAtIndex(indexBefore-1);
      let data = params.data.x - dataBefore.x;
      return data;}},
    {field: 'koef', width:150, cellEditor: 'agRichSelectCellEditor'},
    {field: 'proizvod', width:150},
    {field: 'deltaY', width:190},
    {field: 'delta4y', width:150},
    {field: 'proizvodSum', width:150},
  ]

您的问题有几种解决方案,最简单的解决方案是使用 valueGetter.[=14= 中 params 参数中提供的网格 API ]

为您的 'xixi' columnDef 使用以下代码:

{
      field: 'xixi',
      width: 150,
      valueGetter: function (params) {
        if (params.node.rowIndex == 0) {
          return 0;
        }
        let indexBefore = params.node.rowIndex;
        if (params.api == undefined) {
          console.log('her');
          return;
        }
        let dataBefore = params.api.getDisplayedRowAtIndex(indexBefore - 1);
        let data = params.data.x - dataBefore.data.x;
        return data;
      },

Demo.