Principales respuestas
Poblar dos combobox sin base de datos

Pregunta
-
Cordial saludo.
Mi pregunta es la siguiente: Estou creando un formulario sencillo el cual va a tener dos combobox (Departamentos o Estados y Ciudades). El caso es que no quiero utilizar una base de datos para ello, pues me preferiría que el ejecutable fuese un solo archivo, además el listado de los comboBox son perpetuos, es decir, no cambiarían, por lo que basicamente podrian ser de solo lectura.
No escribo el listado de valores directamente, porque la idea es que el combo Ciudad sea dependiente Departamentos.
Encontré información sobre usar un Dataset, pero no se hasta que punto pueda utilizar este objeto sin necesidad de tener un archivo por separado.
Agradezco su ayuda e ideas. Saludos.
Respuestas
-
No hay ninguna necesidad de tener una base de datos. Al combo siempre le puedes añadir por programación los items que quieras. Por ejemplo:
comboBox1.Items.Add("Prueba")
Por supuesto, donde yo pongo "Prueba" eso es un simple string, y puede salr de una variable. Y la sentencia la puedes repetir en un bucle, tomando el valor de la variable desde donde lo tengas almacenado, por ejemplo desde un .resx o desde un array cargado a piñón fijo con constantes escritas en el código fuente.
Es más, si haces esto último (precargar un array) entonces el array se lo puedes vincular al combo exactamente igual que cuando le vinculas cualquier colección traída desde una base de datos:
comboBox1.DataSource = miArrayDeCadenas
- Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 17:26
- Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
-
¿Y dónde es que piensas contener la información?, ¿en memoria?, de ser así, puedes utilizar listas de un tipo que contenga propiedades de descripción y asociación, por ejemplo:
private class Pais { public int idPais { get; set; } public string Nombre { get; set; } } private class Ciudad { public int idCiudad { get; set; } public int idPais { get; set; } public string Nombre { get; set; } } private List<Pais> ObtenerPaises() { List<Pais> paises = new List<Pais>(); paises.Add(new Pais() { idPais = 1, Nombre = "Perú" }); paises.Add(new Pais() { idPais = 2, Nombre = "Ecuador" }); return paises; } private List<Ciudad> ObtenerCiudades(int idPais) { List<Ciudad> ciudades = new List<Ciudad>(); ciudades.Add(new Ciudad() { idCiudad = 1, idPais = 1, Nombre = "Lima" }); ciudades.Add(new Ciudad() { idCiudad = 2, idPais = 1, Nombre = "Arequipa" }); ciudades.Add(new Ciudad() { idCiudad = 3, idPais = 2, Nombre = "Quito" }); ciudades.Add(new Ciudad() { idCiudad = 4, idPais = 2, Nombre = "Guayaquil" }); return ciudades.Where(x => x.idPais == idPais).ToList(); }
El método ObtenerPaises() lo invocas al iniciar la aplicación (evento Load del formulario) y el método ObtenerCiudades() cada vez que se selecciona un país (evento SelectionChangeCommitted del desplegable de países)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 17:26
- Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
Todas las respuestas
-
No hay ninguna necesidad de tener una base de datos. Al combo siempre le puedes añadir por programación los items que quieras. Por ejemplo:
comboBox1.Items.Add("Prueba")
Por supuesto, donde yo pongo "Prueba" eso es un simple string, y puede salr de una variable. Y la sentencia la puedes repetir en un bucle, tomando el valor de la variable desde donde lo tengas almacenado, por ejemplo desde un .resx o desde un array cargado a piñón fijo con constantes escritas en el código fuente.
Es más, si haces esto último (precargar un array) entonces el array se lo puedes vincular al combo exactamente igual que cuando le vinculas cualquier colección traída desde una base de datos:
comboBox1.DataSource = miArrayDeCadenas
- Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 17:26
- Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
-
¿Y dónde es que piensas contener la información?, ¿en memoria?, de ser así, puedes utilizar listas de un tipo que contenga propiedades de descripción y asociación, por ejemplo:
private class Pais { public int idPais { get; set; } public string Nombre { get; set; } } private class Ciudad { public int idCiudad { get; set; } public int idPais { get; set; } public string Nombre { get; set; } } private List<Pais> ObtenerPaises() { List<Pais> paises = new List<Pais>(); paises.Add(new Pais() { idPais = 1, Nombre = "Perú" }); paises.Add(new Pais() { idPais = 2, Nombre = "Ecuador" }); return paises; } private List<Ciudad> ObtenerCiudades(int idPais) { List<Ciudad> ciudades = new List<Ciudad>(); ciudades.Add(new Ciudad() { idCiudad = 1, idPais = 1, Nombre = "Lima" }); ciudades.Add(new Ciudad() { idCiudad = 2, idPais = 1, Nombre = "Arequipa" }); ciudades.Add(new Ciudad() { idCiudad = 3, idPais = 2, Nombre = "Quito" }); ciudades.Add(new Ciudad() { idCiudad = 4, idPais = 2, Nombre = "Guayaquil" }); return ciudades.Where(x => x.idPais == idPais).ToList(); }
El método ObtenerPaises() lo invocas al iniciar la aplicación (evento Load del formulario) y el método ObtenerCiudades() cada vez que se selecciona un país (evento SelectionChangeCommitted del desplegable de países)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 17:26
- Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
-