none
DataGridView com ComboBox RRS feed

  • Pergunta

  • Boa tarde,

    poxa estou com um problema que não estou conseguindo resolver.


    Eu tenho um cadastro com duas caixas de textos um representando código e outro descrição de uma determinada tabela e um datagridview,

    os dados dos textbox e no grid consegui abrir via código, só que no datagridview queria somente uma coluna com um combobox.

    Eu tenho uma estrutura de tabela parecida com essa

    tabela1(cod_tb1, descricao)
    tbpossui(cod_tb1, cod_tb2)
    tabela2(cod_tb2, descricao)

    o datagridview serve de detail, este é a "tbpossui", só que no combobox quando o usuário estiver inserindo novo registro no grid o sistema listaria todos os dados da "tabela2" e quando fosse gravado o registro do grid o sistema registraria na tabela "tbpossui" o cod_tb1 e o cod_tb2.

    E também quando o usuário estivesse somente fazendo uma pesquisa no cadastro alternando entre os registros, o sistema exibiria somente o combobox com os dados selecionados.

    Não sei se expliquei direito, mas se alguém puder me ajudar eu agradeço.
    mefdias
    sexta-feira, 15 de maio de 2009 20:45

Respostas

Todas as Respostas

  • Olá, Marcio.

    Dê uma olhada neste exemplo: http://www.eggheadcafe.com/articles/20060202.asp


    Abraço,
    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    domingo, 17 de maio de 2009 05:05
  • Cara, obrigado pela resposta, mas não consegui rodar porque da erro acredito que seja por causa da versão do Visual C# que é o 2008.
    Então continuo sem resolver meu problema, continuo ainda precisando de ajuda, veja abaixo como estou fazendo as coisas.

    Quem puder me ajudar.

    Utilizando isso aqui quando navego entre os dados da tabela principal (tabela1), o grid alterna entre os dados que possuem relacionamento. Blz.

    private void txtCodigo_TextChanged(object sender, EventArgs e)
    {
         dgvDados.AutoGenerateColumns = false;
         dgvDados.DataSource = bsTbPossui;
         bsTbPossui.DataSource = banco.retTable("select * from tbPossui where cod_tb1 = " + txtCodigo.Text, conexao);

         bsTabela2.DataSource = banco.retTable("select * from tabela2", conexao);
         dgvDados.Columns[0].DataPropertyName = "cod_tb1";
         dgvDados.Columns[1].DataPropertyName = "cod_tb2";
    }

    Com os comandos abaixo consigo listar no combo os nomes que ajudaram o usuário identificar o que ele esta inserindo.

    private void dgvDados_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
           ComboBox combo = e.Control as ComboBox;
           combo.DataSource = banco.retTable("select * from tabela2", conexao);
           combo.DisplayMember = "nome";
           combo.ValueMember = "cod_tb2";           
    }

    Até ai tudo bem, mais quando tento alterar algum item dentro do combobox o sistema retorna o erro abaixo, fora que ao listar os dados no grid o combo não informa o registro correspondente ao selecionado, ou seja, o "cod_tb2" é igual a "1" e o combo retorna vazio.

    Erro ao selecionar
    The folowwing exception occurred in the DataGridVies:
    System.ArgumentException: DataGridViewComboxCel value is not valid.


    Obs.: As colunas inserir do DataGridView inserir através o Wizard que o controle possui, bsTbPossui e bsTabela2 são BindingSource que inseri direto no formulário sem utilização de código, então para trazer os dados das tabelas utilizo uma função.


    mefdias
    quarta-feira, 20 de maio de 2009 22:21
  • Nelson muito obrigado pela ajuda, mas consegui fazer o que eu queria de olhando a ajuda do visual C#.
    mefdias
    • Marcado como Resposta Marcio Dias sexta-feira, 22 de maio de 2009 12:52
    sexta-feira, 22 de maio de 2009 12:51