none
C# - DatagridView com ComboBox1 filtrando itens da ComboBox2 que filtra itens da ComboBox3 RRS feed

  • Pergunta

  • Olá amigos,

    Estou quebrando a cabeça há dias tentando resolver o seguinte:  Estou desenvolvendo um aplicativo do tipo WinForms em C# (Visual Studio 2015 Professional) e em um formulário eu tenho um DataGridView.

    Esse DGV tem três ComboBoxes: ComboBoxCursos, ComboBoxModulos, ComboBoxTurmas.

    Gostaria que quando o usuário selecionasse um item da CB1 (Cursos) a CB2 exibisse somente os Módulos desse curso e a CB3 exibisse somente as Turmas desse Módulo.  Isso é possível?

    Por favor exemplifiquem com código, se der, pois sou bem iniciante em C#.  Muito obrigado pelo seu tempo e pela sua ajuda.  Um grande abraço a todos! :)


    jcrcarmo

    quarta-feira, 5 de outubro de 2016 01:12

Respostas

  • Bom dia, Robson!  Consegui fazer o código funcionar.  O problema estava na definição das colunas no datagridview designer.

    O banco de dados é Microsoft Access, a versão mais atual, e o filteredModulosBS exibe a lista de módulos que um curso tem.

    Agora estou com um outro problema.  Quando eu salvo os dados no datagridview e abro o banco de dados para ver, o dgv salvou tudo em branco. Você tem alguma ideia do que pode estar acontecendo?  Muito obrigado pela sua ajuda.


    jcrcarmo

    sexta-feira, 7 de outubro de 2016 14:16

Todas as Respostas

  • Boa tarde JC Carmo,

    Você pode criar um event listener usando o evento ComboBox.SelectedIndexChanged para que quando o índice da primeira combo box mudar, os valores da segunda combo box sejam determinados.

    Neste link há uma exemplo em código.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 5 de outubro de 2016 19:20
    Moderador
  • Estou tentando esse código abaixo, mas está dando erro na linha em negrito.  O error é:

    "An unhandled exception of type 'System.Data.EvaluateException' occurred in System.Data.dll.  Additional information: Não é possível encontrar a coluna [English]."

    Obs: English é uma das opções de curso na primeira comboBox do DataGridView.

            private void Alunos_Load(object sender, EventArgs e)

         {

              this.tbl_cursosTableAdapter.Fill(this.bremingtonDataSet.tbl_cursos);

              this.tbl_modulosTableAdapter.Fill(this.bremingtonDataSet.tbl_modulos);

              this.tbl_turmasTableAdapter.Fill(this.bremingtonDataSet.tbl_turmas);

     

              DataView dv = new DataView(bremingtonDataSet.Tables["tbl_modulos"]);

              filteredModulosBS.DataSource = dv;

         }

     


            private void tbl_alunos_subDataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)

            {

                if (e.ColumnIndex == comboBoxModulo.Index)

                {

                    DataGridViewComboBoxCell dgcb = (DataGridViewComboBoxCell)tbl_alunos_subDataGridView[e.ColumnIndex, e.RowIndex];

                    dgcb.DataSource = filteredModulosBS;

                    this.filteredModulosBS.Filter = "Código = "+ this.tbl_alunos_subDataGridView[e.ColumnIndex - 1, e.RowIndex].Value.ToString();

                }

            }

     


            private void tbl_alunos_subDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)

            {

                if (e.ColumnIndex == this.comboBoxModulo.Index)

                {

                    DataGridViewComboBoxCell dgcb = (DataGridViewComboBoxCell)tbl_alunos_subDataGridView[e.ColumnIndex, e.RowIndex];

                    dgcb.DataSource = tblmodulosBindingSource;

                    this.filteredModulosBS.RemoveFilter();

                }

            }


    jcrcarmo

    quarta-feira, 5 de outubro de 2016 20:04
  • Bom dia JC Carmo,

    Tente colocar aspas simples depois de "Código" e depois de "ToString()" assim:

    this.filteredModulosBS.Filter = "Código = '"+ this.tbl_alunos_subDataGridView[e.ColumnIndex - 1, e.RowIndex].Value.ToString() + "'";
    Atenciosamente,

    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 6 de outubro de 2016 14:47
    Moderador
  • Bom dia Robson,

    Obrigado por responder!  Eu usei a sua linha de código com as aspas simples e agora o debug me dá a seguinte mensagem de erro:

    An unhandled exception of type 'System.Data.EvaluateException' occurred in System.Data.dll
    Additional information: Não é possível realizar a operação '=' em System.Int32 e System.String.

    O que será que está acontecendo?  Obrigado pelo seu tempo.  :)


    jcrcarmo

    quinta-feira, 6 de outubro de 2016 15:46
  • Bom dia JC Carmo,

    O banco de dados é SQL ?
    E qual é o tipo de dado de filteredModulosBS ?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 7 de outubro de 2016 13:37
    Moderador
  • Bom dia, Robson!  Consegui fazer o código funcionar.  O problema estava na definição das colunas no datagridview designer.

    O banco de dados é Microsoft Access, a versão mais atual, e o filteredModulosBS exibe a lista de módulos que um curso tem.

    Agora estou com um outro problema.  Quando eu salvo os dados no datagridview e abro o banco de dados para ver, o dgv salvou tudo em branco. Você tem alguma ideia do que pode estar acontecendo?  Muito obrigado pela sua ajuda.


    jcrcarmo

    sexta-feira, 7 de outubro de 2016 14:16