none
Combo box deve apresentar o registro correto no Form Load RRS feed

  • Pergunta

  • Bom dia amigos,
    Fiz um Combo box, e vinculei na tabela Operacao, só tem dois registros nensta tabela do Combo box, que são débito e crédito.
    Utilizo o combo box, selecionando a operação se é Débito ou Crédito no Form de Lançamento, porém quando abro o formulário de lançamento, o Combo box está sempre no Crédito, que é o primeiro registro da tabela Operacao. embora o registro da tabela Lancamento esteja debito. Os outros registros no Form de lançamento estão corretos, fazem a leitura correta da tabela.
    O problema é no load, que sempre vem Crédito. E não vem o valor da tabela Lancamento Porquê?
    Obs.: Está salvando corretamente. Somente no Load que parece que está lendo o 1º registro da tabela do Combo Box.

    Quando mudei o nome para outro qualquer, confirmou isso, aparece o novo nome no Load. Isto é, o combo box, no load, está lendo o 1º registro da tabela que está vinculado (operacao).

    Como resolver isso, que ele leia exatamente o que está na tabela de Lancamento?

    sexta-feira, 2 de novembro de 2018 15:40

Respostas

  • Ola F.oliveirarocha

    Particularmente não utilizo este meio para carregar o combo nas minhas aplicações.

    Inicialmente, sugiro observar o seu código.

    Aparentemente você está associando a tblOperações por ultimo e isto explica o fato que aparecer a informação de Operacaos em vez de Lacamentos.

                this.operacaoBindingSource1.DataSource = DataContextFactory.DataContext.Operacaos;

    Outra sugestão:

    Tente carregar o seu combo desta forma:

    private void preencherCBDescricao()
            {
                String scon = "Data Source=NOME DO SERVIDOR\\BASESQL;Initial Catalog=SI_ATPS;Persist Security Info=True;User ID=sa;Password=MINHASENHA";
                con = new SqlConnection(scon);
                try
                {
                    con.Open();
                }
                catch (SqlException sqle)
                {
                    MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
                }
                String scom = "select * from departamento";
                SqlDataAdapter da = new SqlDataAdapter(scom,con); 
                DataTable dtResultado = new DataTable();
                dtResultado.Clear();//o ponto mais importante (limpa a table antes de preenche-la)
                comboBox1.DataSource = null;
                da.Fill(dtResultado);
                comboBox1.DataSource = dtResultado;
                comboBox1.ValueMember = "codigo";
                comboBox1.DisplayMember = "descricao";
                comboBox1.SelectedItem = "";
                
        }

    Este exemplo está aqui.

    Crie uma classe e reaproveite o seu código.

    sábado, 3 de novembro de 2018 19:30

Todas as Respostas

  • Ola

    Como você está carregando o combo?

    Mostra o seu código.

    sexta-feira, 2 de novembro de 2018 22:43
  • Bom dia Marcos,

    Não estou carregando com código nenhum. Esse mesmo problema aparece em outros formulários com outros combo box. Quando carrega, vem o 1º item da tabela do combo box (1º Crédito, 2º Débito).

    Está apenas com a configuração de praxe, e o bindingsource que busca na tabela os valores. 

    No form Load está assim: 

                this.lancamentoBindingSource.DataSource = DataContextFactory.DataContext.Lancamentos;
                this.bancoBindingSource.DataSource = DataContextFactory.DataContext.Bancos;
                this.operacaoBindingSource1.DataSource = DataContextFactory.DataContext.Operacaos;

    Deve ter algum comando com SQL para fazer ele ler o código da tabela, e mostrar a descrição no Display.

    Muito obrigado pela atenção.

    Abraços.

    sábado, 3 de novembro de 2018 14:35
  • Ola F.oliveirarocha

    Particularmente não utilizo este meio para carregar o combo nas minhas aplicações.

    Inicialmente, sugiro observar o seu código.

    Aparentemente você está associando a tblOperações por ultimo e isto explica o fato que aparecer a informação de Operacaos em vez de Lacamentos.

                this.operacaoBindingSource1.DataSource = DataContextFactory.DataContext.Operacaos;

    Outra sugestão:

    Tente carregar o seu combo desta forma:

    private void preencherCBDescricao()
            {
                String scon = "Data Source=NOME DO SERVIDOR\\BASESQL;Initial Catalog=SI_ATPS;Persist Security Info=True;User ID=sa;Password=MINHASENHA";
                con = new SqlConnection(scon);
                try
                {
                    con.Open();
                }
                catch (SqlException sqle)
                {
                    MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
                }
                String scom = "select * from departamento";
                SqlDataAdapter da = new SqlDataAdapter(scom,con); 
                DataTable dtResultado = new DataTable();
                dtResultado.Clear();//o ponto mais importante (limpa a table antes de preenche-la)
                comboBox1.DataSource = null;
                da.Fill(dtResultado);
                comboBox1.DataSource = dtResultado;
                comboBox1.ValueMember = "codigo";
                comboBox1.DisplayMember = "descricao";
                comboBox1.SelectedItem = "";
                
        }

    Este exemplo está aqui.

    Crie uma classe e reaproveite o seu código.

    sábado, 3 de novembro de 2018 19:30
  • Marcos boa noite,

    Está dando um erro no sublinhado. Veja o que é e me envie de volta.

     private void PreencherCB_Box_Operacao()

             {
                String scon = "Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                con = new SqlConnection(scon);
                try
                {
                    con.Open();
                }
                catch (SqlException sqle)
                {
                    MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
                }
                String scom = "select * from departamento";
                SqlDataAdapter da = new SqlDataAdapter(scom,con); 
                DataTable dtResultado = new DataTable();
                dtResultado.Clear();//o ponto mais importante (limpa a table antes de preenche-la)
                CB_Operacao.DataSource = null;
                da.Fill(dtResultado);
                CB_Operacao.DataSource = dtResultado;
                CB_Operacao.ValueMember = "Cod_Operacao";
                CB_Operacao.DisplayMember = "Descricao_Op";
                CB_Operacao.SelectedItem = "";

            }

    O problema está no con e no SQLAdapter.

    Abraço e obrigado pela atenção.

    terça-feira, 6 de novembro de 2018 01:12
  • Marcos boa noite,

    Está dando um erro no sublinhado. Veja o que é e me envie de volta.

     private void PreencherCB_Box_Operacao()

             {
                String scon = "Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                con = new SqlConnection(scon);
                try
                {
                    con.Open();
                }
                catch (SqlException sqle)
                {
                    MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
                }
                String scom = "select * from departamento";
                SqlDataAdapter da = new SqlDataAdapter(scom,con); 
                DataTable dtResultado = new DataTable();
                dtResultado.Clear();//o ponto mais importante (limpa a table antes de preenche-la)
                CB_Operacao.DataSource = null;
                da.Fill(dtResultado);
                CB_Operacao.DataSource = dtResultado;
                CB_Operacao.ValueMember = "Cod_Operacao";
                CB_Operacao.DisplayMember = "Descricao_Op";
                CB_Operacao.SelectedItem = "";

            }

    O problema está no con e no SQLAdapter.

    Abraço e obrigado pela atenção.

    naos seria um erro de using System.Data.SqlClient;  ?

    coloque assim o  com

    SqlConnection con = new SqlConnection(scon);

     e no using do cabeçalho o evento

    using System.Data.SqlClient;

    espero que te ajude.

    • Editado Titodj7 terça-feira, 6 de novembro de 2018 03:22
    terça-feira, 6 de novembro de 2018 03:06
  • Marcos boa noite,

    Fiz a sua mudança, rodou sem erro, mas o combo box continuou com o problema. Continua lendo o primeiro registro da tabela.

    Obrigado. vamos continuar tentando.

    quinta-feira, 8 de novembro de 2018 00:38
  • Bom dia Marcos,

    Não estou carregando com código nenhum. Esse mesmo problema aparece em outros formulários com outros combo box. Quando carrega, vem o 1º item da tabela do combo box (1º Crédito, 2º Débito).

    Está apenas com a configuração de praxe, e o bindingsource que busca na tabela os valores. 

    No form Load está assim: 

                this.lancamentoBindingSource.DataSource = DataContextFactory.DataContext.Lancamentos;
                this.bancoBindingSource.DataSource = DataContextFactory.DataContext.Bancos;
                this.operacaoBindingSource1.DataSource = DataContextFactory.DataContext.Operacaos;

    Deve ter algum comando com SQL para fazer ele ler o código da tabela, e mostrar a descrição no Display.

    Muito obrigado pela atenção.

    Abraços.

    é Operacaos ou Operacao? 

    aqui tem um link interesante

    https://social.msdn.microsoft.com/Forums/pt-BR/2fb03947-3cf6-487e-9d1b-1d15b1dda3ae/como-preencher-um-combobox-usando-c-ado-sql-server?forum=vscsharppt

    • Editado Titodj7 quinta-feira, 8 de novembro de 2018 02:17
    quinta-feira, 8 de novembro de 2018 01:58
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    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, 14 de novembro de 2018 19:43
    Moderador