[SOLUCIONADO] Problema con combo en grilla editable...
Una vez mas aqui molestando, resulta que tengo una grilla editable, que tiene un textfield y un combo, ella graba la informacion sin problemas pero al momento de cargar el store me muestra el codigo en el caso de los combos y no la descripcion correspondiente a su valor, y al hacer clic sobre la fila, es decir, al entrar a editar la columna donde esta el combo "si" muestra la descripcion, aqui dejo el codigo de mi colummodel
var cmodelPreguntasTipo=new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{
dataIndex : 'id',
header : 'id',
sortable : false,
hidden : true
},
{
dataIndex : 'descripcion',
header : 'Descripcion',
sortable : true,
hidden : false,
width : 400,
editor : {
xtype : 'textfield',
allowBlank : false,
listeners : {
blur: function(c){
c.setValue(c.getValue().toUpperCase())
}
}
}
},
{
header : 'Tipo de pregunta',
sortable : true,
hidden : false,
width : 200,
dataIndex : 'hoja',
editor : {
xtype : 'combo',
allowBlank : false,
id : 'tipoPreguntaId',
hiddenName : 'tipoPreguntaHi',
store : new Ext.data.ArrayStore({
fields: ['hoja', 'descripcion'],
data : [
['1', 'Pregunta abierta'],
['2', 'Pregunta cerrada (alternativas)']
]
}),
displayField : 'descripcion',
valueField : 'hoja',
mode : 'local',
typeAhead : true,
triggerAction : 'all',
lazyRender : true,
name : 'hoja',
emptyText : 'Seleccione un tipo',
listClass : 'x-combo-list-small'
}
}
]
);
desde ya gracias y espero sus comentarios....
Tokkaido, gracias por tu preocupacion despues de mucho andar y estar a cabezasos esto funciono, lo que hice fue lo sgte.
{
header : 'Tipo de pregunta',
sortable : true,
hidden : false,
width : 200,
dataIndex : 'hoja',
renderer : this.muestraDescripcion,
editor : {
xtype : 'combo',
allowBlank : false,
id : 'cmbtipPregunta',
hiddenName : 'tipoPreguntaHi',
store : new Ext.data.ArrayStore({
fields : ['hoja', 'descripcion'],
data : [
[0,'Pregunta abierta'],
[1,'Pregunta cerrada (alternativas)']
]
}),
displayField : 'descripcion',
valueField : 'hoja',
mode : 'local',
typeAhead : true,
triggerAction : 'all',
lazyRender : true,
name : 'hoja',
emptyText : 'Seleccione un tipo'
}
}
osea saque el renderer del editor, que estaba mal y la funcion muestraDescripcion la deje como me lo mencionaste, es decir, asi:
function muestraDescripcion(valor){
var comboTipoPregunta = Ext.getCmp('cmbtipPregunta');
var stx = comboTipoPregunta.getStore();
var index = stx.find('hoja',valor);
if(index>-1){
var record = stx.getAt(index);
return record.get('descripcion');
}
}
creeme que estoy super agradecido por tu ayuda y dedicacion
antes de tu codigo:
var cmodelPreguntasTipo=new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{ ....
debes crear esto
showDescripcion: function(valor){
var st = Ext.StoreMgr.lookup('st_hojas');
var index = st.find('hoja',valor);
if(index>-1){
var record = st.getAt(index);
return record.get('descripcion');
}
}
en tu definición de las columnas agrega esto:
{
header : 'Tipo de pregunta',
sortable : true,
hidden : false,
width : 200,
dataIndex : 'hoja',
renderer : this.showDescripcion,
debería funcionarte
Tokkaido, gracias por tu dedicacion pero aun no logro hacer funcionar esto mira lo deje de la siguiente forma, y ahora la grilla no me muestra nada.
showDescripcion: function (valor){
var st = Ext.StoreMgr.lookup('st_hojas');
var index = st.find('hoja',valor);
if(index>-1){
var record = st.getAt(index);
return record.get('descripcion');
}
}
var cmodelPreguntasTipo=new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{
header : 'Tipo de pregunta',
sortable : true,
hidden : false,
width : 200,
dataIndex : 'hoja',
editor : {
xtype : 'combo',
allowBlank : false,
id : 'tipoPreguntaId',
hiddenName : 'tipoPreguntaHi',
store : new Ext.data.ArrayStore({
id : 'st_hojas',
fields: ['hoja', 'descripcion'],
data : [
[1,'Pregunta abierta'],
[2,'Pregunta cerrada (alternativas)']
]
}),
displayField : 'descripcion',
valueField : 'hoja',
mode : 'local',
typeAhead : true,
triggerAction : 'all',
lazyRender : true,
name : 'hoja',
emptyText : 'Seleccione un tipo',
renderer : showDescripcion
}
}
]
espero me puedas seguir ayudando...
Gracias Tokkaido por tu respuesta pero la verdad sigue sin funcikonar hice lo que me dijiste en el colummodel y en el grid quedando como lo colocare a continuacion pero no funciona la verdad no se me ocurre que hacer o debo estar entendidneo mal, si puedes seguir ayudandome desde ya te lo agradezco
asi me quedo el colummodel...
var cmodelPreguntasTipo=new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{
dataIndex : 'id',
header : 'id',
sortable : false,
hidden : true
},
{
dataIndex : 'descripcion',
header : 'Descripcion',
sortable : true,
hidden : false,
width : 400,
editor : {
xtype : 'textfield',
allowBlank : false,
listeners : {
blur: function(c){
c.setValue(c.getValue().toUpperCase())
}
}
}
},
//{header:'Tipo de pregunta', dataIndex:'descripcion',width:100,sortable: true,editor:comboPerfil}
{
header : 'Tipo de pregunta',
sortable : true,
hidden : false,
width : 200,
dataIndex : 'hoja',
editor : {
xtype : 'combo',
allowBlank : false,
id : 'tipoPreguntaId',
hiddenName : 'tipoPreguntaHi',
store : new Ext.data.ArrayStore({
id : 'idstore',
fields: ['hoja', 'descripcion'],
data : [
[1,'Pregunta abierta'],
[2,'Pregunta cerrada (alternativas)']
]
}),
displayField : 'descripcion',
valueField : 'hoja',
mode : 'local',
typeAhead : true,
triggerAction : 'all',
lazyRender : true,
name : 'hoja',
emptyText : 'Seleccione un tipo'
}
}
]
);
y asi esta la grilla
var gridPreguntasTipo = new Ext.grid.GridPanel({
id : 'gridPreguntasTipoId',
minHeight : 180,
height : 200,
title : 'Pregunta(s) de la categoría',
split : true,
autoScroll : true,
border : false,
loadMask : true,
store : storeTablaGridPreguntas,
cm : cmodelPreguntasTipo,
plugins : [editorPreguntasTipo],
view : new Ext.grid.GroupingView({
markDirty : false // permite quitar la marca roja que indica que el registro es nuevo
}),
listeners:{
'rowclick' : function (grid, row, evt){
var movRecord = storeTablaGridPreguntas.getAt(row);
//Agregar aqui edicion de tab si es pregunta cerrada------------
idBorrar = movRecord.data.id;
if(idBorrar>0){
tabsCategoriaPreguntas.getItem(1).setDisabled(false);
Ext.getCmp('idCategoria').setValue(idBorrar);
}else{
tabsCategoriaPreguntas.getItem(1).setDisabled(true);
Ext.getCmp('idCategoria').setValue("");
}
},
'render':function(valor){
var st = Ext.StoreMgr.lookup('idstore');
alert(st);
var index = st.find('hoja',valor);
if(index>-1){
var record = st.getAt(index);
return record.get('descripcion');
}
}
} ,
tbar : [{
iconCls : 'icon-data-add',
text : 'Agregar',
handler : function(){
var e = new RegistroPreguntasTipo({
descripcion : 'Nuevo registro',
id : 0
});
edita = Ext.getCmp('editorPreguntasTipoId');
edita.stopEditing();
xTab = Ext.getCmp('gridPreguntasTipoId');
StorePaso=xTab.getStore();
StorePaso.insert(0, e);
xTab.getView().refresh();
xTab.getSelectionModel().selectRow(0);
edita.startEditing(0);
}
},
{
ref : '../removeBtn',
iconCls : 'icon-data-delete',
text : 'Borrar',
disabled : true,
handler : function(){
gridedita = Ext.getCmp('gridPreguntasTipoId');
var selectedKeys = gridedita.selModel.selections.keys;
var encoded_keys = Ext.encode(selectedKeys);
gridedita = Ext.getCmp('gridPreguntasTipoId');
edita = Ext.getCmp('editorPreguntasTipoId');
edita.stopEditing();
StorePaso=gridedita.getStore();
var s = gridedita.getSelectionModel().getSelections();
for(var i = 0, r; r = s[i]; i++){
StorePaso.remove(r);
}
}
}]
});
puedes agregar un renderer a tu columna y devolverle la descripción, asignale un storeId a tu store, por ejemplo:
condicion: function(valor){
var st = Ext.StoreMgr.lookup('storeId_de_tu_store');
var index = st.find('hoja',valor);
if(index>-1){
var record = st.getAt(index);
return record.get('descripcion');
}
}
espero te sirva
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.