Man this took a long time to figure out.
Ok, inside a Sencha ExtJS DataGrid, I have assigned a ComboBox as the editor for one of the columns populated with its own Store of items. I’ve got a ColdFusion Component returning a query object, which is then converted into JSON with the ajaxCFC class.
var ItemCode = Ext.data.Record.create([
{name: 'item_id', type: 'int'}
{name: 'item_code', type: 'string'}
]);
var ItemCodesStore = new Ext.data.Store({
autoLoad:false,
proxy: new Ext.data.MemoryProxy(),
reader: new Ext.data.JsonReader({ root: 'data'; }, ItemCode)
});
// Snippet from ColumnModel of DataGrid
header: 'Code',
dataIndex: 'existingCode',
width: 70,
editor: new Ext.form.ComboBox({
mode: 'local',
displayField: 'item_code',
valueField: 'item_id',
store: ItemCodesStore
})
This is straightforward code. The column represents the existingCode value in the DataGrid’s store, and when the user clicks on an individual cell, a ComboBox is rendered with possible values stored in ItemCodesStore.
My problem is that I want the item_code value displayed at all times. By default, when a user selects an item from the ComboBox, the item_id value will be displayed, because even though I have set displayField:’item_code’ in the ComboBox, the DataGrid has no knowledge of this, and always shows the valueField.
What I had to do was write a custom renderer for that column that does a search in the ItemCodes store for a matching item_id and return the item_code to be rendered instead.
function CodeRenderer(val){
var matching = ItemCodesStore.queryBy(
function(rec,id){
return rec.item_id == val;
});
return (matching.items[0]) ? matching.items[0].data.item_code : '';
};
// Snippet from ColumnModel of DataGrid
header: 'Code',
dataIndex: 'existingCode',
width: 70,
renderer: CodeRenderer,
editor: new Ext.form.ComboBox({
mode: 'local',
displayField: 'item_code',
valueField: 'item_id',
store: ItemCodesStore
})
2 Responses for "Sencha ExtJS ComboBox.selectedValue() equivalent for DataGrid"
gotcha,,,my problem resolved,,, :)
thanks,,
Nice done but… how can I load the previous selected value when I want to edit a row?
Leave a reply