See DataSourceField.multiple - you want to set this on your field to indicate that it is array-valued. That's why this worked without a DataSource - it was because your DataSource definition is incorrect.
Once you have correctly configured the field as multiple, you will see a number of behaviors automatically kick in regarding formatting, editing, etc.
As far as your formatCellValue implementation, that's fine but you should just create a map from role codes to role names rather than running a find() on the complete dataset every time the cell is formatted.
Announcement
Collapse
No announcement yet.
X
-
And a final question about displaying the roles in the corresponding grid. I've managed to do this, by defining this method on the grid field:
Code:formatCellValue: function(value) { return value.map(function (role) { return ROLE_ENUM.getCacheData().find('code', role).name }).join(', '); }
Last edited by wallytax; 10 Feb 2021, 01:36.
Leave a comment:
-
When using a field in the form that does not exist in the data source, it works! Is the data source field type "text" the problem?
When I leave that out, it works! If I try to overrule at form item level (with null, "any" or ""), it does not work.Last edited by wallytax; 10 Feb 2021, 01:16.
Leave a comment:
-
What data type should I use for a MultiComboBoxItem
I have a data source with a "text" field that has its values separated with "|" to store user roles (to keep the database simple I have not used a separate table to link roles to users). The column's value looks like this: "|admin|management|sales|". When retrieving the data for a MultiComboBoxItem, I return the values as array from the server (thus ["admin", "management", "sales"]). I run into these two "issues":
1) Using a optionDataSource like this:
Code:isc.DataSource.create({ "cacheData": [ { "code": "finance", "name": "Finance" }, { "code": "readonly", "name": "Read-only" }, { "code": "management", "name": "Management" }, { "code": "system", "name": "System" }, { "code": "sales", "name": "Sales" } ], "clientOnly": true, "fields": [ { "name": "code", "primaryKey": true, "title": "Code", "type": "text" }, { "name": "name", "title": "Name", "type": "text" } ], "ID": "ROLE_ENUM" });
Code:optionDataSource: "ROLE_ENUM", pickListCriteria: { fieldName: 'code', operator: 'inSet', value: <an array of valid roles created based on a condition> }
2) The values can be selected and saved: SmartClient sends an array, my application stores a string (with the "|" symbols), but returns the saved record using an array. Strangely, the MultiComboBoxItem now shows one button with the value "finance,sales" instead of two separate buttons. After that, saving false because unknown values are passed. Is the "text" data type incorrect? Should I return a string with comma's separated?Last edited by wallytax; 10 Feb 2021, 01:18.Tags: None
Leave a comment: