Comunidad de diseño web y desarrollo en internet online

Indexando ComboBox

Citar            
MensajeEscrito el 03 May 2008 01:19 am
Hola amigo, espero que estén bien, les quisiera comentar algo que no encuentro solucion
Desde una base de datos(mysql) traigo los registros para poblar un comBox (php), por medio de Scripts pueblo el Combox, el label es la descripcion de la tabla, y el data es el ID de la descripcion, hasta aqui todo bien, el usuario selecciona una opción y envio el ID que identifica el label y coincide con el ID, hasta aqui todo bien, se guarda en una tabla la opcion que escogio, que es el ID de la descripcion, si el usuario desea modificar algun dato, envio nuevamente el ID y se modifica sin problemas.
El problema es cuando algun registro se borra de la tabla de donde saco los datos pueblo el comboBox, ya que por ejemplo:

ID DESCRIPCION
1 manzana
2 naranja
3 peras

Si borro el 2, el CombBox puebla dos registros, siendo el 2 peras, pero su ID es realmente 3, su selectedItem.data es el 2, entonces al momento que mando a llamar a este registro para que el usuario visualice lo que anteriormente ha escogido la fruta ya no coincide al momento de que quiera modificar, o visualizar cuando se tiene mas registros.

Como puedo hacer para que el ComboBox coincida con el ID de la tabla, asi me ordene la información por el ID de la tabla, ya que una tabla que tengo, está asi:
1
4
10
y es un relajo esto. No se si se pueda igualar el label del ComboBox, asi si el usuario escogio Naranja, coincida con Naranja al momento de visualizar, ect.

Saludos y muchas gracias.

Por atomoclip

61 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 May 2008 01:42 am
La propiedad data (que refleja el id según nos cuentas) no tiene nada que ver con el index que tenga un elemento en el combobox. Si el label es la descripción y el data es el Id, entonces tiene que funcionar así se salten 50 por registro, Ahora si estás enviando el index del combo tienes un error conceptual, tienes que enviar el data (id)
Luego si quieres ordenar por Id (o incluso por descripción) lo haces en el SELECT del lado del PHP

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 May 2008 12:49 pm
Jorge, muchas gracias por la respuesta, mira, este es el codigo en PHP

Código :

if ($_GET['accion'] == "combo_prospecto"){
      include("conf.inc.php");
      $cnx= conectarBD();
      $query= mysql_query("SELECT *e FROM $tabla ORDER BY cuando_comprar DESC");
      $xml= $xmldata;
      $xml.= $xmlup;
      $xml.= '<row Prospecto= "Seleccione una categoría" id="0"/>';
      while($row=mysql_fetch_object($query)){
         $xml.= '<row Prospecto="'.$row->nombre.'" id="'.$row->id.'" />';
      }
      $xml.= $xmldown;
      echo $xml;
      cerrar_cnx($cnx);
   }

Como vez envio el ID a Flash, Flash lo recibe sin problemas, lo carga perfectamente, hasta aqui todo bien, pero por ejemplo, si el xml viene de esta manera, ya que los otros registros el administrador borro, el 2,3,4,6,7 porque estaban descontinuados(por ejemplo).
ID DESCRIPCION
1 Manzana
5 Naranja
8 Pera
Como puedo hacer para que el usuario pueda visualizar este ID en el ComboBox, es decir, que cuando vaya a consultar la información guardada se tope con Pera, ya que el ComboBox para el, es el elemento 3.

Por atomoclip

61 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 May 2008 01:31 pm
El elemento data es invisible en un combobox, lo visible es el Label. Si el data vale 5 o 5000 al usuario no le importa, selecciona Pera y quiere ver los detalles de Pera. A la consulta SQL le da lo mismo que sea 5 o 5000, hará un select de ese elemento y devolverá los detalles de ese elemento. Entonces no veo el problema. A menos que quieras que el label diga 1.Manzana, 2. Naranja, etc, en ese caso pon un contador en el loop donde asignas los elementos al combo y concatena ese valor con el label

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 May 2008 02:24 pm
Gracias Jorge por la pronta respuesta, pero por ejemplo, entré y escogí manzana, guardo el resultado en la base de datos, el id de manzana es 50, luego otro día, deseo entrar a modificar manzana, cuando entro a ver lo que escogí como hago para que se visualice u ordene manzana en el combox, como hago para que el combox diga manzana si trae toda la lista de elementos
1 naranja
50 manzana
55 pera.

aquí te pongo mi código, quizás esté todo mal planteado:

Código de Flash: Cargo el ComboBox desde la base de datos vía PHP.

Código :

vigencia_xml = new XML();
vigencia_xml.ignoreWhite = true;
vigencia_xml.onLoad = function (sucess){
   if (sucess){
      llenar = vigencia_xml.firstChild.childNodes.length;
      $id_selec = new Array(llenar);
      $vigencia_selec = new Array(llenar);
      for (i=0; i<llenar; i++){
         $id_selec[i] = vigencia_xml.firstChild.childNodes[i].attributes.id;
         $vigencia_selec[i] = vigencia_xml.firstChild.childNodes[i].attributes.Vigencia;
      }
      llenarvigencia();
   } 
}
vigencia_xml.load("backend/administracion.php?accion=combo_vigencias");

function llenarvigencia(){
   $datos = new Array();
   vigencia_cb.dataProvider = $datos;
      for (i=0; i<$vigencia_selec.length; i++){
         $datos.addItem({ label: $vigencia_selec[i] , data: $id_selec[i] });
      }
   vigencia_cb.addEventListener("change", Seleccionarvigencia);
}

Seleccionarvigencia = new Object();
Seleccionarvigencia.change = function(evento){
   $vigencia = evento.target.selectedItem.data;
}


Aqui hago que cuando el usuario seleccione algo del comboBox, el ID de la tabla se guarde en la variable $vigencia.
Pero si el usuario en vez de dar de alta un registro, desea ver un registro ya guardado, hago esto para que el ComboBox le visualice la opción que escogió con anterioridad:

Código :

vigencia_cb.selectedIndex = $modelo_idvigencia;

Aquí es donde si algún ID ya no es correlativo me manda otro valor.
Muchas gracias Jorge.

Por atomoclip

61 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 May 2008 02:27 pm
Perdón, cuando pegué el codigo tuve un error, aqui te pego el codigo correcto.

Código :

vigencia_cb.selectedIndex = $vigencia;


Anteriormente el resultado que viene del PHP lo envio a esta variable $vigencia (cuando el usuario hace click en un datagrid para visualizar sus datos completos). De esta forma, si el usuario modifica el ComBox vigencia, se sigue guardando en la misma variable $vigencia.

Por atomoclip

61 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.