none
Poblar dos combobox sin base de datos RRS feed

  • 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.

    martes, 21 de marzo de 2017 22:26

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

    martes, 21 de marzo de 2017 22:44
  • Javier Barrera,

    ¿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.
    martes, 21 de marzo de 2017 22:50

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

    martes, 21 de marzo de 2017 22:44
  • Javier Barrera,

    ¿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.
    martes, 21 de marzo de 2017 22:50
  • Muchas gracias por las ideas que me dieron para solucionar el problema. En el momento me concentré en resolver otro problema y aún no las he puesto en práctica, pero definitivamente debo probar esas soluciones que me han propuesto.
    viernes, 24 de marzo de 2017 21:40