cargar datos en un comboBox
se que hay mucha informacion sobre este tema pero pues e probado de varias maneras y no se que puede estar pasando tengo el siguente codigo.
la verda no puedo visualizar los datos y eso
que intentado de todas las maneras segun como lo indica el foro, alguien me puede ayudar, segun el codigo que llevo.
Ext.onReady(function() { Ext.QuickTips.init(); this.form = new Ext.form.FormPanel({ //standardSubmit: true, // traditional submit url: 'submitform.php', border:false, labelWidth: 150, defaults: { xtype:'textfield', width: 250 }, items:[ { xtype:'combo', fieldLabel:'central', name:'nombre_central', allowBlank:false, editable: false } ] }); this.win = new Ext.Window({ id:'mywin', title: 'Nuevo Local', bodyStyle: 'padding:10px;background-color:#fff;', width:300, maximized: true, height:270, items:[this.form], buttons: [ { text:'Guardar' }, { text:'Cancelar' } ] }); this.win.show(); });en el php tengo algo como esto la consulta esta un poco generalizada pues realmente solo necesito el idcentral y el nombre_central
<?php $conet= mysql_connect("localhost","root","123"); mysql_select_db("abastos", $conet); $resultado = "SELECT * FROM central"; $data = array(); while($row = mysql_fetch_array($resultado)) { //vas agregando los resultados al array "data" array_push($data, array('idcentral'=>$row["idcentral"],'nombre_central'=>$row["nombre_central"],'departamento'=>$row["departamento"], 'direccion'=>$row["direccion"],'telefono'=>$row["telefono"])); } ?>
fe de errata:
debo comentar que cometi un error del cual solo ahora acabo de aprender, donde dice:
[b] id: 'id_interno', //cual de los campos 'fields' será el utilizado como identificador único dentro del store[/b]
deberia decir:
[b] id: 'id_de_mi_store', //id por el cual puedes manejar posteriormente tu store con StoreMgr[/b]
esta propiedad en todo caso está obsoleta y fue reemplazada por [b]storeId[/b], pero si se configura [b]Id[/b] sobreescribira a [b]storeId[/b]
con respecto a los combos dependientes o anidados en esta misma pagina puedes ver un articulo muy bien explicado:
[url]http://www.quizzpot.com/2009/11/combos-dependientes-en-extjs/[/url]
excelente respuesta.
me ayudo con la duda que tenia que era basicamente el manejo del store.
store: new Ext.data.JsonStore({//he aqui el store url : 'mipagina.php', //la pagina de la cual tomaras los datos pa cargar fields: ['id', 'descripcion'],//campos de mi almacen root: 'datos',//este valor nos servirá para tomar los datos que regresemos desde la BD id: 'id_interno', //cual de los campos 'fields' será el utilizado como identificador único dentro del store autoLoad :true // si deseas que tu combo se cargue apenas se muestre, sino tendrás que hacerlo manualmente }),a hora tengo la duda de como puedo realizar algo como esto tengo dos tablas relacionadas ejemplo 1.tabla CATEGORIA Romantica accion 2.tabla peliculas la fuerza del amor rambo la idea es que cuando cargue el primer combobox se me cargue en el segundo las peliculas romanticas en el ejemplo seria algo como combobox1: romantica combobox2:la fuerza del amor como puedo realizar esto?
a ver si te puedo ayudar:
tu combo necesita un store, que es un almacen donde se "almacenaran" los datos y este puede ser de varios origenes, es decir, cargar datos desde un array, via JSON desde tu BD, simple, etc:
te pongo aqui 2 ejemplos simples de los 2 tipos de combo que mas he usado.
tipo Array:
{ xtype: 'combo', id : 'estado', fieldLabel: 'Estado', width: 100, editable : false,//si deseas que no puedan escribir en le combo, solo seleccionar valueField : 'id',//verdadero valor del combo displayField : 'descripcion',//valor mostrado al usuario hiddenName : 'id_estado',//si deseas enviar a tu archivo php el valor oculto debes configurar esta propiedad, sino te enviara el valor desplegado al usuario mode: 'local',//para que no haga que el store se recargue cada vez que se despliega el combo debemos configurar esta propiedad asi triggerAction: 'all',//si no configuras esta propiedad cuando selecciones un valor del listado desaparecerán los demás como una especie de filtro store: new Ext.data.ArrayStore({//he aqui el store fields: ['id', 'descripcion'],//campos de mi almacen data: [//los datos tanto internos, como los que vera el usuario [0, 'Soltero'], [1, 'Casado'], [2, 'Viudo'], [3, 'Separado'], [4, 'Divorciado'] ] }), listeners : { select : function(){ //qui puedes colocar algo que se ejucute cuando el usuario seleccione un item } } }y tipo JSON, este requiere un poquito mas de trabajo:
{ xtype: 'combo', id : 'estado', fieldLabel: 'Estado', width: 100, editable : false,//si deseas que no puedan escribir en le combo, solo seleccionar valueField : 'id',//verdadero valor del combo displayField : 'descripcion',//valor mostrado al usuario hiddenName : 'id_estado',//si deseas enviar a tu archivo php el valor oculto debes configurar esta propiedad, sino te enviara el valor desplegado al usuario mode: 'local',//para que no haga que el store se recargue cada vez que se despliega el combo debemos configurar esta propiedad asi triggerAction: 'all',//si no configuras esta propiedad cuando selecciones un valor del listado desaparecerán los demás como una especie de filtro store: new Ext.data.JsonStore({//he aqui el store url : 'mipagina.php', //la pagina de la cual tomaras los datos pa cargar fields: ['id', 'descripcion'],//campos de mi almacen root: 'datos',//este valor nos servirá para tomar los datos que regresemos desde la BD id: 'id_interno', //cual de los campos 'fields' será el utilizado como identificador único dentro del store autoLoad :true // si deseas que tu combo se cargue apenas se muestre, sino tendrás que hacerlo manualmente }), listeners : { select : function(){ //qui puedes colocar algo que se ejucute cuando el usuario seleccione un item } } }y en el archivo php con el cual alimentaras el combo debes colocar lo sgte:
$sql = "SELECT * FROM tutabla ORDER BY tu_campo_por_el_cual_quieres_ordenar"; //si los campos devueltos no se llaman como lo tienes en tu store puedes configurar tu consulta //de la sgte manera por ejemplo: "SELECT micampo1 AS id_interno,micampo2 AS descripcion FROM tu_tabla" o ajustas la //configuración de tu combo para cargar //los campos que necesitas, yo te aconsejo que si tu tabla tiene muchos campos y //solo vas a requerir 2 para tu combo configures tu consulta solo para devolver aquellos campos y evitar usar el asterisco * //evitando enviar datos innecesariamente $arr = array(); $rs = mysql_query($sql); while($obj = mysql_fetch_object($rs)){ $arr[] = $obj; } Echo '{success:true,datos:'.json_encode($arr).'}';espero te sea de ayuda y si tengo errores por favor corrijanme porque así todos aprendemos.
¿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.