es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccionar elementos de Combobox al seleccionar un grupo

Tengo un combobox en mi archivo .xaml:

<combobox name="Group" margin="50,71,330,618" grid.column="1"></combobox>

Y otro combobox en mi archivo .xaml:

<combobox name="Sort" margin="20,71,0,618"></combobox>

Cuando selecciono un elemento de mi combobox, como ‘Líquido’, solo quiero ver los elementos de la tabla Sort que tengan el nombre de grupo Líquido.

Mi FK/PK están correctos en la base de datos, pero no sé cómo ponerlos en mi proyecto WPF.

Estoy utilizando Visual Studio 2019, C# en WPF.

En mi archivo .cs tengo la siguiente consulta para que siempre muestre los elementos en el combobox:

public AddStock()
{
    InitializeComponent();
    bindcomboboxgroup();
}

private void bindcomboboxgroup()
{

    try
    {
        SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=local");
        string SelectQuery = "SELECT Name From [Group]";
        con.Open();
        SqlCommand cmd = new SqlCommand(SelectQuery, con);
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Groep.Items.Add(reader.GetString("Name"));
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error occurred:\r\n" + ex.Message);
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para filtrar los elementos en tu segundo combobox basado en la selección del primer combobox, necesitas utilizar la vinculación de datos y actualizar la consulta en consecuencia.

    Primero, debes vincular la propiedad SelectedItem del primer combobox a una propiedad en tu archivo de código detrás utilizando la vinculación de datos bidireccional. Agrega el siguiente código a tu XAML:

    <combobox name="Group" margin="50,71,330,618" grid.column="1" selecteditem="{Binding SelectedGroupName, Mode=TwoWay}"></combobox>
    

    A continuación, agrega una propiedad llamada SelectedGroupName a tu archivo de código detrás y actualiza el constructor para establecer el DataContext en la instancia actual de la clase:

    public partial class AddStock : Window
    {
        public string SelectedGroupName { get; set; }
    
        public AddStock()
        {
            InitializeComponent();
            DataContext = this;
            bindcomboboxgroup();
        }
    
        // resto de tu código...
    }
    

    Ahora, en tu método bindcomboboxgroup, actualiza la consulta para incluir una cláusula WHERE que filtre los resultados basados en el nombre de grupo seleccionado:

    private void bindcomboboxsort()
    {
        try
        {
            SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"local\";
            string SelectQuery = string.Format("SELECT Name FROM Sort WHERE GroupName = '{0}'", SelectedGroupName);
            con.Open();
            SqlCommand cmd = new SqlCommand(SelectQuery, con);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Sort.Items.Add(reader.GetString("Name"));
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Se produjo un error:\r\n" + ex.Message);
        }
    }
    

    Finalmente, agrega un controlador de eventos para el evento SelectionChanged del primer combobox que llame al método bindcomboboxsort:

    private void Group_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Sort.Items.Clear();
        bindcomboboxsort();
    }
    

    Y actualiza tu XAML para vincular el controlador de eventos:

    <combobox name="Group" margin="50,71,330,618" grid.column="1" selecteditem="{Binding SelectedGroupName, Mode=TwoWay}" selectionchanged="Group_SelectionChanged"></combobox>
    

Comments are closed.