[solucionado]Grid dinamico
Hola:
Tengo un problema con mi grid dinámico que cargo de la base de datos, el mismo es que la primera ves que lo cargo lo hace todo bien , pero al cerrar la ventana y volverlo a crear no me carga los datos, se queda con los datos viejos y no actualiza.Aquí les dejo el código para ver quien me pueda dar una ayuda.
JS
todo se muestra en una ventana
var readerPresupuesto = new Ext.data.JsonReader({
idProperty: 'IdPresupuesto',
meta: 'metaData'
});
stPresupuesto = new Ext.data.GroupingStore({
url: 'cargarpresupuesto',
reader: readerPresupuesto,
sortInfo:{field: 'concepto', direction: "ASC" },
groupField: 'concepto'
});
stPresupuesto.on('beforeload',function(){
this.baseParams = {idInversion: grid.getSelectionModel().getSelected().get('cod_inv')};
});
stPresupuesto.on('load',function(){
var cm = [];
Ext.each(stPresupuesto.fields.items,function(data,index){
if(index == 2){
storeTipoMoneda = new Ext.data.SimpleStore({
fields: ['id_um','um2','factor','uMBase'],
data: readerPresupuesto.meta.storeUm
});
comboTipoMoneda = new Ext.form.ComboBox({
allowBlank: false,
editable: false,
store: storeTipoMoneda,
id: data.name,
name: data.name,
triggerAction: 'all',
style: 'text-align:left',
mode: 'local',
displayField: 'um2',
valueField: 'id_um'
});
comboTipoMoneda.on('expand',function(combo){
storeTipoMoneda.clearFilter();
storeTipoMoneda.filter('um2',gridPresupuesto.getSelectionModel().getSelected().get('moneda'),true,false);
});
cm.push({
header: data.header,
dataIndex: data.name,
sortable: false,
groupable: data.groupable,
editor: comboTipoMoneda,
hideable: data.hideable,
hidden: data.hidden,
renderer: function(value){
var index = storeTipoMoneda.find('id_um',value);
if(index > -1) return storeTipoMoneda.getAt(index).get('um2');
else return value;
},
summaryType: 'umbase'
});
}
else if(index > 2 && data.editar){
cm.push({
header: data.header,
dataIndex: data.name,
sortable: false,
groupable: data.groupable,
editor: new Ext.form.NumberField({
allowBlank: false,
allowNegative: false,
decimalPrecision: 1,
style: 'text-align:left',
id: data.name,
name: data.name
}),
hideable: data.hideable,
hidden: data.hidden,
summaryType: 'convertir'
});
}
else{
cm.push({
header: data.header,
dataIndex: data.name,
sortable: false,
groupable: data.groupable,
hideable: data.hideable,
hidden: data.hidden
});
}
}
);
if(!gridPresupuesto){
gridPresupuesto = new Ext.grid.EditorGridPanel({
plugins: [new Ext.grid.GroupSummary()],
store: stPresupuesto,
autoScroll: true,
sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
columns: cm,
border: true,
forceFit: true,
autoFill: true,
stripeRows: true,
clicksToEdit: 1,
viewConfig: {
enableRowBody: true,
showPreview: true
},
view: new Ext.grid.GroupingView({
ShowGroupName: false,
enableNoGroups: false,
enableGropingMenu: false,
hideGroupedColumn: false
})
});
gridPresupuesto.on('beforeedit',function(e){
storeTipoMoneda.clearFilter();
if(e.field != 'umMoneda'){
if(e.record.get('umMoneda') != '')
return true;
else{
mostrarMensaje(1,'Debe poner primero la unidad de medida.');
return false;
}
}
return true;
});
}
else{
gridPresupuesto.getColumnModel().setConfig(cm);
}
winPreInv.el.unmask();
winPreInv.add(gridPresupuesto);
winPreInv.doLayout();
},this);
stPresupuesto.load();
}
y en el PHP
$fields = array(
array("name" => "concepto", "header" => "Concepto", "groupable" => true, "hideable" => false, "hidden" => true,'dataIndex' => 'concepto'),
array("name" => "moneda", "header" => "Moneda", "groupable" => false, "hideable" => true, "hidden" => false,'dataIndex' => 'moneda'),
array("name" => "umMoneda", "header" => "Unidad de Medida", "groupable" => false, "hideable" => true, "hidden" => false,'dataIndex' => 'umMoneda'),
array("name" => "cod_moneda", "header" => "Codigo", "groupable" => false, "hideable" => true, "hidden" => true,'dataIndex' => 'cod_moneda'),
array("name" => "cod_concepto", "header" => "cod_concepto", "groupable" => false, "hideable" => true, "hidden" => true,'dataIndex' => 'cod_concepto')
);
for ($i = 0; $i < $cant_ayos; $i++) {
array_push($fields, array("name" => $ayo_inicio + $i, "type" => "float", "header" => $ayo_inicio + $i, "editar" => (date('Y') false, "hideable" => true, "hidden" => false,'dataIndex' => $ayo_inicio + $i));
}
$metadata = array(
"totalProperty" => "results",
"successProperty" => "success",
"idProperty" => "id",
"fields" => $fields,
"root" => "data",
"storeUm" => $umed,
"sortInfo" => array('field' => 'concepto', 'direction' => "ASC"),
"groupField" => "concepto"
);
echo json_encode(
array(
"success" => true,
"metaData" => $metadata,
"results" => count($datos),
"data" => $datos
));
en la variable $datos ya están los datos organizados como los quiero mandar,me parece que el problema es que el store no se refresca y se queda con los datos viejos.
Gracias de antemano.
Ya lo solucione solamente tuve que agregarle unas lineas de código
gridPresupuesto.getColumnModel().setConfig(cm);
gridPresupuesto.reconfigure(stPresupuesto, gridPresupuesto.getColumnModel());
con esas 2 lineas se soluciona todo el problema, la primera lo que hace es cambiar la configuracion del column model que lo creo en un array que se llama cm y la 2 lo que hace es relacionar el column model con el store que en este caso es un grouping store
Buenas, podrias facilitar el codigo completo. Estoy trantando de hacer un grouping grid con summary pero con columnas variables y no he podido dar en la tecla. Te agradeceria la ayuda.
Muchas gracias
¿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.