none
Retornar valor exato de moeda da base no TextBox RRS feed

  • Pergunta

  • Olá pessoal, 

    Sou amante de C# e faço programinhas básicos para uso próprio e, como não sou profissional em programação, preciso de uma ajuda. É uma coisa básica (penso), mas olhei de tudo na net sobre isso e nada.

    Segue:

    Fiz uma textbox e apliquei nele um evento que que pega um valor que já deixa com pontos e vírgulas tipo moeda e salva no banco. Configurei minha base que está em access no tipo do campo como moeda. OK. Lá no banco fica salvo exatamente como R$ 70,00 por exemplo. Tudo certo.

    Agora na hora que retorno os dados no textbox ao invés de aparecer 70,00 aparece 0,70.

    Penso que o erro está na forma em que estou retornando os dados para os campos. Mas não consegui contornar isso. Mando abaixo o código que uso para retornar os dados da base aos campos (o problema ocorre no campo txtValorConsulta):

     private void SelecionaOsDados()
            //Faz a seleção dos dados na tabela CadDadosClínica e joga nos campos
            {
                try
                {
                    OleDbDataReader vDados;
                    //Define a conexão com o provedor de dados:
                    string strConnSeleciona = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\dbClinica.mdb;Persist Security Info=True;";
                    //Abre o banco de dados:
                    OleDbConnection dbConnection = new OleDbConnection(strConnSeleciona);
                    dbConnection.Open();
                    //Define a instrução SQL:
                    OleDbCommand cmdSQLSeleciona = new OleDbCommand("SELECT * FROM CadDadosClinica WHERE ID = '" + (txtID.Text) + "'", dbConnection);
    
                    vDados = cmdSQLSeleciona.ExecuteReader();
                                   
                    while (vDados.Read())
                    {
                        txtID.Text = vDados["ID"].ToString();
                        txtValorConsulta.Text = vDados["ValorConsulta"].ToString();
                        txtProfissional.Text = vDados["Profissional"].ToString();
                        txtCRMV.Text = vDados["Crmv"].ToString();
                        txtRua.Text = vDados["Rua"].ToString();
                        txtNumero.Text = vDados["Numero"].ToString();
                        txtBairro.Text = vDados["Bairro"].ToString();
                        txtCidade.Text = vDados["Cidade"].ToString();
                        txtCep.Text = vDados["Cep"].ToString();
                        txtCNPJ.Text = vDados["Cnpj"].ToString();
                        txtEmail.Text = vDados["Email"].ToString();
                        txtCelular.Text = vDados["Celular"].ToString();
                        txtFone.Text = vDados["Fone"].ToString();
                    }
    
                    vDados.Close();
                    dbConnection.Close();
    
                }
    
                catch (OleDbException ex)
                {
                    MessageBox.Show("Erro: " + ex.Message);
                }
            }
    Se puderem ajudar agradeço.

     



    sábado, 9 de janeiro de 2016 17:00

Respostas

  • Se não funcionar use isso:

            public string FormatarParaMoeda(object valor)
            {
                if (Convert.ToDouble(valor.ToString().Replace(".",",")) >= 1)
                {
                    return (string)valor + ",00";
                }
                else
                {
                    return (string)valor;
                }
            }

    E naquela linha use:

    txtValorConsulta.AppendText(FormatarParaMoeda(vDados["ValorConsulta"].ToString()));


    C#.NET / VB.NET
    Aulas de VB.NET

    Não se esqueça! Se uma resposta/post te foi útil, é generoso reconhece-lo clicando em votar e se uma resposta foi fundamental para o desenrolar dum problema marque como resposta, você ajuda(visitantes) e motiva(quem te respondeu)!

    domingo, 10 de janeiro de 2016 20:46

Todas as Respostas

  • Dá um MessageBox.Show:

    MessageBox.Show(vDados["ValorConsulta"].ToString());

    E vê se também aparece os 0,70 você disse que estava usando um evento para formatar a caixa de texto, o problema não seria nele? se puder mostrar o código, posso tentar ajudar!


    C#.NET / VB.NET
    Aulas de VB.NET

    Não se esqueça! Se uma resposta/post te foi útil, é generoso reconhece-lo clicando em votar e se uma resposta foi fundamental para o desenrolar dum problema marque como resposta, você ajuda(visitantes) e motiva(quem te respondeu)!

    sábado, 9 de janeiro de 2016 20:01
  • Cara, tentei como citou acima mas não dá. Gera o erro abaixo:

    Error 1 Cannot implicitly convert type 'System.Windows.Forms.DialogResult' to 'string'

    Mas como citou acima, mando abaixo o código que usei digitar direto no textbox a moeda já formatada (usei dois eventos para textbox:

    Primeiro este:

     private void ConverterDadosMoeda(ref TextBox ValorMoeda)
            //Esta função converte os valores digitados nos campos onde precisa ser no formato moeda
            //Porém a mesma só funciona se antes jogar o código abaixo no evento "textchanged" do campo em questão:
            // TextBox ValorMoeda"nome da referência" = (TextBox)sender;
            // ConverterDadosMoeda"nome da função"(ref ValorMoeda);
            // Vai gerar aviso no nome da função dizendo que não foi implementada, porém feito isso pedir para implementar a função e jogar nela o código abaixo:
    
            {
                string m = string.Empty;
                double v = 0;
                try
                {
                    m = ValorMoeda.Text.Replace(",", "").Replace(".", "");
                    if (m.Equals(""))
                        m = "";
                    m = m.PadLeft(3, '0');
                    if (m.Length > 3 && m.Substring(0, 1) == "0")
                        m = m.Substring(1, m.Length - 1);
                    v = Convert.ToDouble(m) / 100;
                    ValorMoeda.Text = string.Format("{0:N}", v);
                    ValorMoeda.SelectionStart = ValorMoeda.Text.Length;
                }
    
                catch (Exception)
                {
    
                    throw;
                }
    
            }
    

    Depois este:

            
            private void txtValorConsulta_TextChanged(object sender, EventArgs e)
            {
                TextBox ValorMoeda = (TextBox)sender;
                ConverterDadosMoeda(ref ValorMoeda);
            }

    No digitar fica perfeito, e salva certinho no banco, pois antes havia tentado no maskedtextbox mas faz uma meleca ao salvar na base.

    Agradeço.

    domingo, 10 de janeiro de 2016 17:29
  • Tente usar o ApprendText
    txtValorConsulta.AppendText(vDados["ValorConsulta"].ToString());


    C#.NET / VB.NET
    Aulas de VB.NET

    Não se esqueça! Se uma resposta/post te foi útil, é generoso reconhece-lo clicando em votar e se uma resposta foi fundamental para o desenrolar dum problema marque como resposta, você ajuda(visitantes) e motiva(quem te respondeu)!

    domingo, 10 de janeiro de 2016 20:36
  • Se não funcionar use isso:

            public string FormatarParaMoeda(object valor)
            {
                if (Convert.ToDouble(valor.ToString().Replace(".",",")) >= 1)
                {
                    return (string)valor + ",00";
                }
                else
                {
                    return (string)valor;
                }
            }

    E naquela linha use:

    txtValorConsulta.AppendText(FormatarParaMoeda(vDados["ValorConsulta"].ToString()));


    C#.NET / VB.NET
    Aulas de VB.NET

    Não se esqueça! Se uma resposta/post te foi útil, é generoso reconhece-lo clicando em votar e se uma resposta foi fundamental para o desenrolar dum problema marque como resposta, você ajuda(visitantes) e motiva(quem te respondeu)!

    domingo, 10 de janeiro de 2016 20:46
  • Se não funcionar use isso:

            public string FormatarParaMoeda(object valor)
            {
                if (Convert.ToDouble(valor.ToString().Replace(".",",")) >= 1)
                {
                    return (string)valor + ",00";
                }
                else
                {
                    return (string)valor;
                }
            }

    E naquela linha use:

    txtValorConsulta.AppendText(FormatarParaMoeda(vDados["ValorConsulta"].ToString()));


    C#.NET / VB.NET
    Aulas de VB.NET

    Não se esqueça! Se uma resposta/post te foi útil, é generoso reconhece-lo clicando em votar e se uma resposta foi fundamental para o desenrolar dum problema marque como resposta, você ajuda(visitantes) e motiva(quem te respondeu)!

    Funcionou perfeitamente! Muito obrigado!!!
    segunda-feira, 11 de janeiro de 2016 13:28
  • André boa noite,

    Tenta fazer a conversão com o decimal e utilize uma variável

    Decimal ValorParcela = 0,00;

    Exemplo:

     valor_ParcelaTextBox1.Text = Convert.ToDouble(ValorParcela).ToString();

    Se ajudar, marque como certa. Espero que te ajude.

    sexta-feira, 26 de abril de 2019 01:24