Выбор ячейки ag-grid cellEditor с значениями объекта

Я хочу выбрать из списка пользователей:

user.ts

export class User
{
 constructor (public id: number, public userName : string){}
}

определение столбца выглядит следующим образом:

this.columns = [
 {headerName: "Assigned", field:"user.userName", 
 editable: true ,cellEditor: "select", 
 cellEditorParams: {values : this.users.map(u=> u.userName)},
]

Я хочу иметь возможность выбрать пользователя из списка и получить в cellValueChanged объект.

Есть ли опция, в которой user будет полем, а не строковым значением, и в ячейке будет отображаться user.username?

2 ответа

Наконец, я нашел обходное решение, чтобы получить 'select' работу с key и value.

var colorsNames = [];
colors.forEach(color=> {
 colorsNames.push(color.name);
})
...
{
 headerName: "Color",
 field: "colorId",
 width: 150,
 editable: true,
 cellEditor: 'select',
 cellRenderer: function (data: any) {
 var color = colors.find(color => color.id == data.value || color.name == data.value);
 // here I've added the check for 'color.id' and 'color.name' because initailly from DB will com the id and afterwards form selectparams will come the name
 return color.name;
 },
 onCellValueChanged: function (data: any) {
 /**
 * because 'select' does not offer us the possibility to use 'key-value' as traditional,
 * we will use only values in 'select' and changed to 'id' when will be saved.
 */
 var serviceTypeName = data.data.serviceTypeId;
 data.data.serviceTypeId = serviceTypes.find(serviceType => serviceType.name == serviceTypeName).id;
 },
 cellEditorParams: {
 values: colorsNames
 }
},

Идея заключается в том, что внутри select params мы будем приводить только строки, и мы попытаемся найти id объекта на основе name. Важно то, что мы согласились, что name - уникальное поле.

После того, как я получил работу, я понял, что действительно select - очень плохое решение. Не работает должным образом, и я бы не советовал использовать его.

@Yonatan Lilling По любым вопросам, пожалуйста, дайте мне знать.


Я нашел решение для javascript в https://www.ag-grid.com/javascript-grid-reference-data/?framework=angular#gsc.tab=0

i создаем свой массив:

var Etat_acces = {"1": "Annulée", "2": "Validée", "3": "A valider CEX", "4": "Demandée", "5":"Initialisée"};

и в моем столбцеDefs:

{
headerName: "Etat Ni", field: "etat_acces", editable: true, cellEditor:'select',
 cellEditorParams: {
 values: extractValues(Etat_acces)
 },
 valueFormatter: function (params) {
 return lookupValue(Etat_acces, params.value);
 },
 ***********: function (params) {
 return lookupKey(Etat_acces, params.newValue);
 }
}

и для трех функций:

function extractValues(mappings) {
return Object.keys(mappings);
}
function lookupValue(mappings, key) {
 return mappings[key];
}
function lookupKey(mappings, name) {
 for (var key in mappings) {
 if (mappings.hasOwnProperty(key)) {
 if (name === mappings[key]) {
 return key;
 }
 }
 }
}

Надеюсь, это может быть полезно;)

licensed under cc by-sa 3.0 with attribution.