none
Dúvida em c# RRS feed

  • Pergunta

  • olá pessoal eu tenho este exemplo e pretendo carregar uma comboBox quando seleciono um item de uma outra comboBox, com o código abaixo carrega uma comboBo agora só precizo de saber com faço para carregar a outra através de um item selecionado, visto que as tabelas estão realcionadas por uma chave estrangeira ( A tabela Municipio tem uma chave estrangeira de Provincias) e quando selecionar uma Provincia mostra na outra combobox todos os municípios equivalenta a aquela Provìncia.

    SqlConnection Conexao1 = new SqlConnection(BD.StrConexão);
    SqlDataAdapter adaptaer = new SqlDataAdapter("SELECT * FROM Provincias", Conexa);

    DataTable dt = new DataTable();

    adaptaer.Fill(dt);
    comboBox3.DataSource = dt;
    comboBox3.DisplayMember = "Nome";

    comboBox3.ValueMember = "IdProv";

    sexta-feira, 17 de fevereiro de 2012 09:45

Respostas

  • Dai vc carrega o combo de Provincia no load da pagina e carrega o municipio no selectedVakueChanged do combo de provuncia... Código completo:

            protected void Page_Load(object sender, EventArgs e)
            {
                DataTable dt = ExecutaComando("Select * from tabela_provincia");
    
                comboProvincia.DataSource = dt;
                comboProvincia.DisplayMember = "Nome";
                comboProvincia.ValueMember = "IdProv";
            }
    
            private void cmbProvincia_SelectedValueChanged(object sender, EventArgs e)
            {
                DataTable dt = ExecutaComando("select * from municipio where id_provincia = " + Convert.ToInt16(comboProvincia.SelectedValue));
    
                comboMunicipio.DataSource = dt;
                comboMunicipio.DisplayMember = "Nome";
                comboMunicipio.ValueMember = "IdMunicipio";
            }
    
            public DataTable ExecutaComando(string strComando)
            {
                try
                {
                    SqlConnection conexao = new SqlConnection("sua string de conexao");
                    if (conexao.State != ConnectionState.Open)
                        conexao.Open();
    
                    DataTable table = new DataTable();
                    SqlCommand Comand = new SqlCommand(strComando, conexao);
                    SqlDataAdapter Adapter = new SqlDataAdapter(Comand);
    
                    Adapter.Fill(table);
    
                    return table;
                }
                catch (Exception)
                {
                    throw new ArgumentException("Falha ao executar o comando no banco de dados");
                }
                finally
                {
                    if (conexao.State == ConnectionState.Open)
                        conexao.Close();
                }
    
            }

    Não esqueça de marcar como resposta ;)



    sexta-feira, 17 de fevereiro de 2012 14:00

Todas as Respostas

  • No evento do selectedValueChanged do seu combo de provincias, pesquise os municipios. EX:

    private void cmbProvincia_SelectedValueChanged(object sender, EventArgs e)
            {
                var sql = "select * from municipio where id_provincia = " + Convert.ToInt16(cmbProvincia.SelectedValue);
    
                //EXECUTA O SQL, PEGA O RESULTADO E JOGA NO COMBO DE MUNICIPIO
            }

    SE AJUDOU, MARQUE COMO RESPOSTA ;)
    • Sugerido como Resposta Renato Coqueiro sexta-feira, 17 de fevereiro de 2012 10:16
    • Editado Renato Coqueiro sexta-feira, 17 de fevereiro de 2012 10:17
    sexta-feira, 17 de fevereiro de 2012 10:15
  • Olá Renato como faço para carregar o comboBox Municipios:

    Será preciso uma nova SqConnection 

    um novo Sqldatatable

    um novo Sqldataadapter

    passar o cmMunicipioDatasource=datatable;

    cmbMunicipio=Displaymember="NomeMunic";

    cmbMunicipio=ValueMember="IdMunic";

    sexta-feira, 17 de fevereiro de 2012 13:45
  • Precisa fazer denovo sim Denilson... naquela né amigo... já ouviu dizer que repetir código é feio? Então...

    Segue a dica: Faça um método chamado executarComando que receba uma string e retorne um dataTable... dai vc não precisa repetir o código, vc só manda a string pra ele e ele te retorna o dataTable...

    Ex:

            public DataTable ExecutaComando(string strComando)
            {
                try
                {                               SqlConnection conexao = new SqlConnection("sua string de conexao");
                    if (conexao.State != ConnectionState.Open) 
                        conexao.Open();
    
                    DataTable table = new DataTable();
                    SqlCommand Comand = new SqlCommand(strComando, conexao);
                    SqlDataAdapter Adapter = new SqlDataAdapter(Comand);
    
                    Adapter.Fill(table);
    
                    return table;
                }
                catch (Exception)
                {
                    throw new ArgumentException("Falha ao executar o comando no banco de dados");
                }
                finally
                {
                    if (conexao.State == ConnectionState.Open)
                        conexao.Close();
                }
                
            }




    • Sugerido como Resposta Renato Coqueiro sexta-feira, 17 de fevereiro de 2012 13:52
    • Editado Renato Coqueiro sexta-feira, 17 de fevereiro de 2012 15:06
    sexta-feira, 17 de fevereiro de 2012 13:51
  • Dai vc carrega o combo de Provincia no load da pagina e carrega o municipio no selectedVakueChanged do combo de provuncia... Código completo:

            protected void Page_Load(object sender, EventArgs e)
            {
                DataTable dt = ExecutaComando("Select * from tabela_provincia");
    
                comboProvincia.DataSource = dt;
                comboProvincia.DisplayMember = "Nome";
                comboProvincia.ValueMember = "IdProv";
            }
    
            private void cmbProvincia_SelectedValueChanged(object sender, EventArgs e)
            {
                DataTable dt = ExecutaComando("select * from municipio where id_provincia = " + Convert.ToInt16(comboProvincia.SelectedValue));
    
                comboMunicipio.DataSource = dt;
                comboMunicipio.DisplayMember = "Nome";
                comboMunicipio.ValueMember = "IdMunicipio";
            }
    
            public DataTable ExecutaComando(string strComando)
            {
                try
                {
                    SqlConnection conexao = new SqlConnection("sua string de conexao");
                    if (conexao.State != ConnectionState.Open)
                        conexao.Open();
    
                    DataTable table = new DataTable();
                    SqlCommand Comand = new SqlCommand(strComando, conexao);
                    SqlDataAdapter Adapter = new SqlDataAdapter(Comand);
    
                    Adapter.Fill(table);
    
                    return table;
                }
                catch (Exception)
                {
                    throw new ArgumentException("Falha ao executar o comando no banco de dados");
                }
                finally
                {
                    if (conexao.State == ConnectionState.Open)
                        conexao.Close();
                }
    
            }

    Não esqueça de marcar como resposta ;)



    sexta-feira, 17 de fevereiro de 2012 14:00
  • Olá Renato usei o Seu Código inclusivelmente criei o Código parágrafo retornar UMA tabela de dados e Gera o seguinte Erro:

     / / O Erro aponta parágrafo ESTA Linha do Código: ad.Fill (dt);

    O Identificador De Varias contraditório "System.Data.DataRowView" Nao PoDE Ser Vinculado.

    contudo com o mesmo método só a comboBox Províncias carrega as Províncias todas no evento load da form

    só quando tento carregar a comboBox Municípios é que dá a mensagem, usei um try e um catch ao clicar num item da com combox Províncias ela diz (A coluna não existe, mas na mensagem mostra o Id da Provincia).

    Obrigado

    att: A meu Id_Prov não é do tipo int mas sim NChar(4)

    quarta-feira, 22 de fevereiro de 2012 13:14
  • O erro ocorre quando alimenta o DataTable com os dados...
    Verifique se sua instrução SQL está correta.
    Coloque um Try Catch para ver qual mensagem de erro é exibida!

    Ocorre erros comuns em tempo de execução quando o nome do campo indicado no ComboBox é diferente dos que estão no DataTable.

    Poste aqui pra gente te ajudar!


    É ajudando os outros que ajudamos nos mesmos...

    segunda-feira, 27 de fevereiro de 2012 21:37
  • Ao rodar o programa dá o mesmo erro:O Identificador De Varias partes "System.Data.DataRowView" Nao PoDE Ser Vinculado. faço clic duas vejes no botão OK ele abri a forma e carrega a 1ª comboBox e ao selecionar um item dá o sequinte erro na caixa nome de coluna inválida que é a fk da tabela Municipios e pk da tabela Provincias, cara como precizo de uma ajuda urgente gostaria que me mandasse uma outra forma e mais simples de resolver. Obrigado

    quarta-feira, 29 de fevereiro de 2012 16:38