Я хочу установить для флажка значение true в зависимости от условия в ag-сетке - PullRequest
0 голосов
/ 26 мая 2020

У меня есть кнопка, которая в основном импортирует некоторые данные. Эти импортированные данные необходимо сравнить с данными внутри уже загруженной ag-grid, и если есть совпадение, установите для cehckbox этого конкретного узла строки значение true.

Это кнопка, которая проверяет условие:

    enableCheck() {
    alert('works');
    if (this.DataService.isNotBlank(this.rowDataImport)) {
        for (let i = 0; i < this.rowDataImport.length; i++) {
            if (this.DataService.isNotBlank(this.rowData)) { 
                for (let j = 0; j < this.rowData.length; j++) { 
                    if (this.DataService.isNotBlank(this.rowData[j].calDate)) {
                        for (const calDates of this.rowData[j].calDate) {
                            if (
                            this.rowDataImport[i].isin === calDates.isin ||
                            this.rowDataImport[i].portfolioName === calDates.portfolioName ||
                            this.rowDataImport[i].valuationDate === calDates.valuationDate
                                ) 
                                {
                                     // alert('true')
                                    this.checkValue = true;
                                } else {
                                    this.checkValue = false;                                        
                                }
                        }
                    }
                }
            }
        }
      }

}

this.checkValue - это флаг, который будет истинным, если найдено совпадение.

  public gridColumnDefs = [
        {
            headerName: 'Portfolio Name',
            field: 'portfolioName',
            cellRenderer: 'agGroupCellRenderer',
            headerCheckboxSelection: true,
            headerCheckboxSelectionFilteredOnly: true,
            checkboxSelection: true,
            pinned: 'left',
            filter: true,
            cellRendererParams:(params) => {
                console.log(params);
                if (this.checkValue) {
                 params.node.selected = true;
                }
            }
        },
]

здесь я использовал cellRendererParams. Но я думаю, это будет только для загрузки. Что делать, если я хочу обновить строку ag-grid из значения за пределами, то есть из проверки импорта, как указано выше?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Я немного поработал и сделал то, что ниже, что сработало как шарм.

 this.gridApi.forEachNode(node => {
                    if (node.data.isin === this.rowDataImport[i].isin &&
                            node.data.portfolioName === this.rowDataImport[i].portfolioName &&
                            node.data.valuationDate === this.rowDataImport[i].valuationDate
                    ) {
                        node.setSelected(true);
                    }
0 голосов
/ 28 мая 2020

Прежде всего, вы должны добавить идентификатор для каждой строки в defaultColDef

this.defaultColDef = {
  getRowNodeId: data => data.id,
};

Затем вы можете найти этот идентификатор и установить флажок в значение true.

Кроме того, вы можете найти отдельное поле по имени. Это действительно просто, вам нужно использовать следующую комбинацию

  selectRow() {
    this.gridApi.forEachNode(node => {
        if (node.id == 1 || node.id == 2 || node.data.country == 'Australia') {
            node.setSelected(true);
        }
    });
  }

Рабочий пример: https://plnkr.co/edit/ijgg6bXVleOAmNL8

В этом примере, когда мы нажимаем на кнопку - мы устанавливаем для двух строк с идентификаторами 1 и 2 и для каждого поля со страной "Австралия" установлен флажок

И в вашем случае вы используете неправильную конфигурацию.

Вам следует cellRenderer

cellRenderer: params => {
  if(params.value === 'Ireland') {
    params.node.setSelected(true)
  }
  return params.value
},

Еще один пример: https://plnkr.co/edit/PcBklnJVT2NsNbm6?preview

...