locked
ListBox y base de datos RRS feed

  • Pregunta

  • Buenas señores,

    he estado investigando un poco y os cuento. Tengo un listBox1 el cual carga unos usuarios con su nombre apellidos y nick desde una tabla de una base de datos mysql. Tengo otro listbox2 en el que al seleccionar los usuarios del primer listbox1 los añado en el listbox2 y, a su vez, los elimino del listbox1. 

    La cosa es que los datos del listbox2 los quiero actualizar en otra tabla. Por lo tanto, tengo que coger las filas desde ese listBox y almacenarlas en mi tabla. Había pensado en cargar los datos en el primer listbox con un dataReader pero necesito actualizar los datos del listbox 2 en la tabla de la base de datos para lo cual tendría que leer cada fila del listbox2 y partir la cadena. El problema es que son datos introducidos por usuarios y no me fío de que puedan introducir algún carácter que yo pueda utilizar para partir mi cadena. 

    Visto lo cual he pensado en crearme un list donde guardaré los datos que pase de un listbox a otro pero para ello tendría que hacerlo todo manualmente sin poder enlazar datos.

    ¿Se os ocurre alguna solución enlazando datos y que ahorre algo de código?

    Espero haberme explicado bien jeje.

    Muchas gracias y un saludo

    viernes, 20 de marzo de 2015 12:49

Respuestas

  • Bueno, en primer lugar debemos determinar el tipo de proyecto.  Parece que habla de Windows Forms así que asumiré que estoy en lo cierto.

    Lo que me preocupa aquí de primera entrada es la duplicidad en base de datos de Usuarios.  Dice que toma los nombres de una tabla y guarda en otra.  Siguiendo las reglas de normalización de base de datos, usted debería guardar en la segunda tabla únicamente la clave primaria de los registros que encontró en la primera tabla.  Le agradeceré que nos confirme el escenario en detalle desde la perspectiva de almacenamiento de datos.

    Luego vamos a enlazar datos y la entrada de datos:  Hasta donde yo recuerdo, un ListBox no permite escribir directamente, ¿o sí?  Que yo recuerde no lo permite.  Por lo tanto me queda la duda de cómo trabaja esa parte.

    Ahora bien, olvidándonos momentáneamente del asunto anterior, hablemos de enlace a datos:  Con el DataReader usted puede crear un BindingList<Usuario>, donde Usuario sería una clase que representa el usuario.  Esa lista puede ser el DataSource del ListBox.  Para que se muestre lo que usted desea en dicho Listbox (nombre, apellidos, etc.), debe sobreescribir el método ToString() de la clase Usuario.

    Luego al ListBox2 le asigna un BindingList<Usuario> vacío.  Cuando el usuario selecciona del primer LB y decide mover al segundo, simplemente hay que sacar el objeto Usuario del primer BindingList y agregarlo al segundo.


    Jose R. MCP
    Code Samples

    viernes, 20 de marzo de 2015 13:22
    Moderador

Todas las respuestas

  • hola

    >>El problema es que son datos introducidos por usuarios y no me fío de que puedan introducir algún carácter que yo pueda utilizar para partir mi cadena.

    porque datos introducidos por el usuario no era que el primer listbox lo cargas desde la db y el segundo seleccionas a partir del primero, si es asi no veo donde introduce el usuario ese caracter que mencionas

    pero necesito actualizar los datos del listbox 2 en la tabla de la base de datos para lo cual tendría que leer cada fila del listbox2 y partir la cadena.

    si te animas cuando tomas los datos del primer listbox podrias usar una clase como ser

    public class xxClass{
    
        public int id {get;set;}
    
        public string nombre {get;set;}
    
        public string apellido {get;set;}
    
    }


    entonces con un reader podrias cargar un List<xxClass> con esto podrias usar el

    xxClass item = (xxClass)listbox1.SelectedItem;

    o sea trabajas con clases pero para esto necesitas asignar el Datasource

    de esta forma ya no necesitas parsear un string sino que usas clases

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 20 de marzo de 2015 13:22
  • Bueno, en primer lugar debemos determinar el tipo de proyecto.  Parece que habla de Windows Forms así que asumiré que estoy en lo cierto.

    Lo que me preocupa aquí de primera entrada es la duplicidad en base de datos de Usuarios.  Dice que toma los nombres de una tabla y guarda en otra.  Siguiendo las reglas de normalización de base de datos, usted debería guardar en la segunda tabla únicamente la clave primaria de los registros que encontró en la primera tabla.  Le agradeceré que nos confirme el escenario en detalle desde la perspectiva de almacenamiento de datos.

    Luego vamos a enlazar datos y la entrada de datos:  Hasta donde yo recuerdo, un ListBox no permite escribir directamente, ¿o sí?  Que yo recuerde no lo permite.  Por lo tanto me queda la duda de cómo trabaja esa parte.

    Ahora bien, olvidándonos momentáneamente del asunto anterior, hablemos de enlace a datos:  Con el DataReader usted puede crear un BindingList<Usuario>, donde Usuario sería una clase que representa el usuario.  Esa lista puede ser el DataSource del ListBox.  Para que se muestre lo que usted desea en dicho Listbox (nombre, apellidos, etc.), debe sobreescribir el método ToString() de la clase Usuario.

    Luego al ListBox2 le asigna un BindingList<Usuario> vacío.  Cuando el usuario selecciona del primer LB y decide mover al segundo, simplemente hay que sacar el objeto Usuario del primer BindingList y agregarlo al segundo.


    Jose R. MCP
    Code Samples

    viernes, 20 de marzo de 2015 13:22
    Moderador