Usuário com melhor resposta
Retornar valor exato de moeda da base no TextBox

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.
- Editado Helinton Kachinsky segunda-feira, 11 de janeiro de 2016 13:32
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)!- Sugerido como Resposta André Vinícius Lima domingo, 10 de janeiro de 2016 20:57
- Marcado como Resposta Helinton Kachinsky segunda-feira, 11 de janeiro de 2016 13:26
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)! -
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.
-
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)! -
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)!- Sugerido como Resposta André Vinícius Lima domingo, 10 de janeiro de 2016 20:57
- Marcado como Resposta Helinton Kachinsky segunda-feira, 11 de janeiro de 2016 13:26
-
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)! -