none
Combos enlazados o dependientes RRS feed

  • Pregunta

  • Saludos expertos, una nueva consulta. Tengo un combo que me muestra una lista de Departamentos en su propiedad "DisplayMember", mientras que su propiedad "ValueMember" cargo el ID del Departamento. En el evento SelectedIndexChange del combo lleno el segundo combo con la lista de cargos filtrandolos por el departamento. de modo que cuando se seleccione el departamento A, el combo de cargos solo liste los cargos que pertenecen al departamento A. el problema es que cuando selecciono el departamento A el combo de cargos lista los cargos que pertenecen al departamento B; y si selecciono el departamento B entonces el combo de cargos me lista los puestos del departamento C y así sucesivamente. He verificado la relacion en la tabla y todos esta como debe. Aquí les presento el código que he utilizado, y desde ya agradezco sus comentarios.

     private void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
            {
                SqlConnection cnx = new  SqlConnection(ConfigurationManager.ConnectionStrings["cnxString"].ConnectionString);
                cnx.Close();


                query = @"SELECT IdCargo, Car_Descripcion FROM Cargos 
                    WHERE IdDepartamento= '" + Convert.ToInt32(cboDepartamento.SelectedIndex) + "' ";

                SqlDataAdapter da = new SqlDataAdapter(query, cnx);

                DataTable dt = new DataTable();
                da.Fill(dt);

                cboCargo.Refresh();
                cboCargo.DataSource = dt;
                cboCargo.DisplayMember = "Car_Descripcion";
                cboCargo.ValueMember = "IdCargo";
            }

    viernes, 22 de mayo de 2015 22:15

Respuestas

  • hola

    aqui

    [WinForms] ComboBox Anidados

    un ejemplo completo de como podrias implementarlo

    algo que recomiendo es que uses parametros

    string query = @"SELECT IdCargo, Car_Descripcion FROM Cargos WHERE IdDepartamento= @id"; SqlCommand cmd = new SqlCommand(query, cnx);

    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(cboDepartamento.SelectedValue)) SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt);


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 23 de mayo de 2015 0:06

Todas las respuestas

  • Hola soyeddygh creo que deberías usar como parámetro el valor de selección del combobox (SelectedValue), mas no el indice que selecciones del control combobox.

     private void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
            {
                SqlConnection cnx = new 
    SqlConnection(ConfigurationManager.ConnectionStrings["cnxString"].ConnectionString);
                cnx.Close();
    
    
                query = @"SELECT IdCargo, Car_Descripcion FROM Cargos 
                    WHERE IdDepartamento= '" + Convert.ToInt32(cboDepartamento.SelectedValue) + "' ";
    
                SqlDataAdapter da = new SqlDataAdapter(query, cnx);
    
                DataTable dt = new DataTable();
                da.Fill(dt);
    
                cboCargo.Refresh();
                cboCargo.DataSource = dt;
                cboCargo.DisplayMember = "Car_Descripcion";
                cboCargo.ValueMember = "IdCargo";
            }
    Espero haberte ayudado.
    viernes, 22 de mayo de 2015 22:30
  • hola

    aqui

    [WinForms] ComboBox Anidados

    un ejemplo completo de como podrias implementarlo

    algo que recomiendo es que uses parametros

    string query = @"SELECT IdCargo, Car_Descripcion FROM Cargos WHERE IdDepartamento= @id"; SqlCommand cmd = new SqlCommand(query, cnx);

    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(cboDepartamento.SelectedValue)) SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt);


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 23 de mayo de 2015 0:06