Редактирование столбца в неопределенном поле с ag-grid
Я настроил ag-grid для определений столбцов, как это ниже
{
headerName: 'Model Level',
field: 'ModelLevelTimeSeries.Id.Value',
editable: false,
cellRendererFramework: RenderEntityComponent,
cellStyle: { textAlign: "center" },
suppressSizeToFit: true,
}
По сути, поле из серверной части может возвращать ноль
"ModelLevelTimeSeries": {
"Id": null
}
или же
"ModelLevelTimeSeries": {
"Id": {
"Value": "dec70622-3ab3-4b47-a324-f69a14a53beb"
}
}
Когда я редактирую значение ячейки, оно возвращает null
для params.value
в agInit
метод.
Я использую "ag-grid": "^17.0.0",
"ag-grid-angular": "^17.0.0".
2 ответа
Вы можете использовать установщик значений для ваших coldefs
{
headerName: 'Model Level',
field: 'ModelLevelTimeSeries.Id.Value',
editable: false,
cellRendererFramework: RenderEntityComponent,
cellStyle: { textAlign: "center" },
suppressSizeToFit: true,
valueSetter: function(params: any){
if (params.oldValue !== params.newValue) {
params.data[params.colDef.field] = (params.newValue) !== "" ? params.newValue.toUpperCase() : "";
return true;
}
else {
return false;
}
}
}
Просто добавьте функцию cellRnderer в определение вашего столбца
cellRenderer: params => params.value ? params.value : ''
теперь будет так
{
headerName: 'Model Level',
field: 'ModelLevelTimeSeries.Id.Value',
editable: false,
//add below line
cellRenderer: params => params.value ? params.value : ''
cellRendererFramework: RenderEntityComponent,
cellStyle: { textAlign: "center" },
suppressSizeToFit: true,
}
По моему опыту, использование params.data[params.colDef.field] в valueSetter не будет работать, если поле is.a.nested.key, потому что params.colDef.field просто возвращает строку типа "ModelLevelTimeSeries.Id.Value"
Сейчас я полагаюсь на lodash set(), чтобы сделать это внутри valueSetter:
import * as set from 'lodash/set'
changeDetectValueSetter (params) {
if (params.oldValue !== params.newValue) {
set(params.data, params.colDef.field, params.newValue) // had to use lodash set, because params.colDef.field is a string representation of a nested object key
// params.data.instruction.billingrecord.invoice_number = params.newValue // could have done this, but it's fixed for that field.
// params.data[params.colDef.field] = params.newValue // this does not work at all if the field is.a.nested.key
return true
} else {
return false
}
},