Используя AG-Grid, отключите / включите поля в одной строке при изменении значения - PullRequest
1 голос
/ 28 апреля 2020

У меня есть AG-Grid, содержащая несколько ячеек, которые необходимо включить / отключить и очистить на основе значения, выбранного в определенном столбце.

|  col_a   |  col_b   |  col_c   | ... | col_t  | ... |
|----------|----------|----------|-----|--------|-----|
| editable | editable | editable | ... | Type W | ... |
| editable | X        | X        | ... | Type X | ... |
| editable | X        | editable | ... | Type Y | ... |
| X        | X        | editable | ... | Type Z | ... |

Если пользователь меняет тип col_t Например, от Type W до Type X, значения в col_b и col_c должны быть очищены (или установлены в «N / A» или что-то в этом роде), а ячейка отключена для редактирования. Если они затем изменяют его с Type X на Type Y, то col_c необходимо повторно включить для редактирования (и значение, оставленное в "N / A").

Я смотрел на предложение для создания нового средства визуализации ячеек , которое, кажется, только обрабатывает включение / отключение, основано на столбце, а не на строке, и, похоже, не касается сброса значения.

У меня есть "правила", сжатые в массив объектов с ключами:

{
  "Type W":["col_a","col_b","col_c",],
  "Type X":["col_a",],
  "Type Y":["col_a","col_c",],
  "Type Z":["col_c",],
}

... и я подозреваю, что могу изменить значения других ячеек в строке, установив onCellValueChanged обработчик для col_t примерно так:

onCellValueChanged: (params) => {
  params.newValue
  const rules = {
    "Type W":["col_a","col_b","col_c",],
    "Type X":["col_a",],
    "Type Y":["col_a","col_c",],
    "Type Z":["col_c",],
  }
  if ( params.oldValue !== params.newValue) {
    theRule.forEach( (columnName) => {
    if( theRule.indexOf(columnName) === -1 ) {
        // reset value
        params.data[columnName] = 'n/a'

        // disable cell
        // ???
      } else {
        //enable row
        // ???

      }
    })
  }
} 

Однако из комментариев вы можете видеть, что я не уверен, как отключить / включить ячейки только в строке, в которой я нахожусь. через API и getRowNode(id), но я не вижу этого.

Есть что-то, что я пропускаю?

1 Ответ

0 голосов
/ 29 апреля 2020

Согласно документам -

В столбце можно редактировать только несколько ячеек; Для этого вместо colDef.editable = true вы можете указать обратный вызов, который будет вызываться для каждой ячейки, отображаемой для этого столбца. Если вы вернете true, ячейка будет редактируемой.

Рассматривали ли вы определение обратного вызова для свойства editable для всех столбцов. Вы можете настроить обратный вызов в соответствии с вашими правилами и добавить его к каждому из colDef. Это должно обрабатывать часть включения / выключения редактирования.

editable: this.customEditFn.bind(this)
...
customEditFn(params){
    //params.node - for row identity
    //params.column - for column identity

   // add your rules here
   // return boolean based  on rules
}  

Вы должны продолжать использовать onCellValueChanged обратный вызов для сброса значений.

Подробнее здесь

...