AG-Grid Cell Взаимозависимость - PullRequest
0 голосов
/ 10 июня 2018

У меня простая настройка таблицы AG-Grid + Angular 5 и я хочу, чтобы AG Grid выполнила следующие вычисления в той же строке.

Формула а * б = сb = c / a

Однако я не очень успешно использую valueGetters.Я полагаю, что в итоге получился какой-то эффект пинг-понга.Не выдается никаких ошибок, но как только я пытаюсь изменить b или c, я получаю странные результаты.
Я перечисляю мои фрагменты кода ниже.У кого-нибудь есть идеи как решить этот? app.component.html

<ag-grid-angular 
    #agGrid style="width: 100%; height: 350px;" 
    class="ag-theme-balham"
    [gridOptions]="gridOptions"
    [columnDefs]="columnDefs"
    [showToolPanel]="showToolPanel"
    [defaultColDef]="defaultColDef"
    [rowData]="rowData">
</ag-grid-angular>

app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {

  private columnDefs;
  private rowData;
  private defaultColDef;

  constructor() {


    this.columnDefs = [
      { headerName: 'a', field: 'a', editable: false },
      { 
        headerName: 'b', 
        field: 'b',
        valueGetter: this.numCalc
      },
      {
        headerName: 'c',
        field: 'c',
        valueGetter: this.resCalc
      }
    ];

    this.rowData = [
      { a: 10, b: 1, c: 10 },
      { a: 20, b: 2, c: 40 },
      { a: 30, b: 3, c: 90 }
    ];

    this.defaultColDef = { editable: true }
  }


  resCalc(params) {
    return params.data.a * params.data.b;
  }

  numCalc(params) { 
    return params.data.c / params.data.a;
  }
}

1 Ответ

0 голосов
/ 12 июня 2018

Я бы рекомендовал вам использовать транзакция .

Ниже приведен пример сеткиОпции для вашего случая:

this.gridOptions = <GridOptions> {
  getRowNodeId: params => params.a,
  onCellEditingStopped: params => {
    const { a } = params.node.data;
    if (params.column.getColId() === 'b') {
      const data = { a, b: parseInt(params.value, 10), c: a * params.value };
      this.gridOptions.api.updateRowData({ update: [data] })
    } else if (params.column.getColId() === 'c') {
      const data = { a, b: params.value / a, c: parseInt(params.value, 10) };
      this.gridOptions.api.updateRowData({ update: [data] })
    } 
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...