Principales respuestas
ListBox y base de datos

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- Propuesto como respuesta Karen MalagónModerator lunes, 23 de marzo de 2015 21:04
- Marcado como respuesta Karen MalagónModerator lunes, 23 de marzo de 2015 21:04
viernes, 20 de marzo de 2015 13:22Moderador
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- Propuesto como respuesta Karen MalagónModerator lunes, 23 de marzo de 2015 21:04
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- Propuesto como respuesta Karen MalagónModerator lunes, 23 de marzo de 2015 21:04
- Marcado como respuesta Karen MalagónModerator lunes, 23 de marzo de 2015 21:04
viernes, 20 de marzo de 2015 13:22Moderador