none
combobox anidados en c# sql (c sharp) RRS feed

  • Pregunta

  • hola buenas tardes

    tengo 3 combos que estan relacionados entre si, combo pais, combo provincia, combo ciudad. Y quiero que al selecionar un item del combo pais se me llene el combo provincia con todas las provincias pertenecientes a ese pais y asi sucesivamente con el combo provincia y ciudad. Estos tiene su base de datos en sql server 2008 y c# vs2010

    clase pais en sql

    codigo int

    pais varchar

    ------------------------

    clase Provincia

    idProvincia

    provincia

    idPais

    --------------------

    clase Ciudad

    idCiudad

    nombre

    idProvincia

    el codigo para cargar los paises y las provincias y las ciudades funciona perfectamente, selecciono "x" pais se cargan las "x" provincias pertenecientes a ese pais y asi con provincias y ciudades. El problema es q me repite los datos, por ejemplo si selecciono un pais del comboPais me carga sus provincias pertenecientes, si vuelvo a seleccionar un item del comboPais me carga sus provincias pertenecientes pero me las suma al comboProvincia obteniendo asi en el comboProvincia los items de la primer seleccion mas los items de la segunda seleccion y asi sucesivamente. No me limpia el comboProvincia al realizar otra seleccion diferente en el comboPais. Espero puedan ayudarme. Estoy con mi proyecto de tesis y ya no se q hacer.

    este es el codigo que estoy aplicando.

    la carga y seleccion funciona perfecto el tema q se repiten los datos de seleccion en el combo dependiente

    ------------------------------------------------

    //cbpais=combo Pais

    //cbprovincia=combo Provincia

    //cbciudad=combo Ciudad

    private void comboPais()
    {

    string selectPais = "select codigo, pais from pais";
    SqlCommand com = new SqlCommand(selectPais, con.con);
    con.con.Open();    //abro conexion(objeto de la clase conexion)
    con.da.SelectCommand = com;//dataAdapter
    con.da.Fill(con.ds, "pais");//relleno dataAdapter con datos de ds(dataset)
    cbpais.DataSource = con.ds.Tables["pais"];
    cbpais.DisplayMember = con.ds.Tables["pais"].Columns["pais"].ToString();
    cbpais.ValueMember = con.ds.Tables["pais"].Columns["codigo"].ToString();
    con.con.Close();
    if (cbpais.Items.Count != 0)
    {
    int idPais = Convert.ToInt32(cbpais.SelectedValue);
    comboProvincia(idPais);
    }
    else
    {
    cbprovincia.DataSource = null;
    cbciudad.DataSource = null;
    }
    }

    private void comboProvincia(int idPais)
    {
    string selectProvincia = "select idProvincia, provincia from Provincia where idPais="+idPais+"";
    SqlCommand com = new SqlCommand(selectProvincia, con.con);
    con.con.Open();
    con.da.SelectCommand = com;
    con.da.Fill(con.ds, "Provincia");
    cbprovincia.DataSource = con.ds.Tables["Provincia"];
    cbprovincia.DisplayMember = con.ds.Tables["Provincia"].Columns["provincia"].ToString();
    cbprovincia.ValueMember = con.ds.Tables["Provincia"].Columns["idProvincia"].ToString();
    con.con.Close();
    if (cbprovincia.Items.Count != 0)
    {
    int idProv = Convert.ToInt32(cbprovincia.SelectedValue);
    comboCiudad(idProv);
    }
    else
    {
    cbciudad.DataSource = null;
    }
    }


    private void comboCiudad(int idProv)
    {
    string selectCiudad = "select idCiudad, nombre from Ciudad where idProvincia=" + idProv + "";
    SqlCommand com = new SqlCommand(selectCiudad, con.con);
    con.con.Open();
    con.da.SelectCommand = com;
    con.da.Fill(con.ds, "Ciudad");
    cbciudad.DataSource = con.ds.Tables["Ciudad"];
    cbciudad.DisplayMember = con.ds.Tables["Ciudad"].Columns["nombre"].ToString();
    cbciudad.ValueMember = con.ds.Tables["Ciudad"].Columns["idCiudad"].ToString();
    con.con.Close();
    if (cbciudad.Items.Count != 0)
    {
    int idCiudad = Convert.ToInt32(cbciudad.SelectedValue);
    }
    }

    domingo, 9 de octubre de 2016 22:00

Todas las respuestas

  • Hola Martin!

    Tendrias que ver en las propiedades del combo, hay una que es CLEAR, al menos en VB aparece de esta forma, tengo armado algo muy parecido, lo que yo realizo es antes de la carga de los datos, un clear ej: comboxxx.clear o puede ser comboxxx.list.clear, no lo recuerdo muy bien, deberias investigar por ese lado 

    Espero te siva mi ayuda

    viernes, 4 de noviembre de 2016 16:25
  • Antes de cargar los datos a tu combo de Provincias asignale al DataSource de tu combo un null;

    P/E: my_combo.DataSource = null;

    Para limpiar primero y despues ya asignar el nuevo data source.

    Saludos!


    Sánchez F., Erik

    lunes, 16 de enero de 2017 17:33