none
Números de Casas Decimais RRS feed

  • Pergunta

  • Olá pessoal!

    Estou iniciando em VB.NET e minha primeira aplicação está bem avançada, porém, estou há dias sem encontrar solução para a seguinte questão. Estou populando um formulário através de BindingSource, meu BD está em access e consigo acessar direitinho os dados, excluir, salvar, tudo funciona perfeitamente com conexão através de OleDbConnection. Porém tenho um campo ValorTextBox que é populado pela coluna Valor da tabela Transaçao. NÃO CONSIGO de forma alguma fazer com que apareça as benditas casas decimais. Exemplo: Quando registro 21,00 só aparece 21 porém se registro 21,11 aparece corretamente. No DataGrid funciona direitinho com o campo em Currency mas no formulário não há jeito, estou a ponto de enlouquecer. Alguém pode me ajudar?

    quarta-feira, 26 de março de 2014 12:59

Respostas

  • Fala MSantoli, blz?

    Tente usar o FormatNumber.

    ValorTextBox.Text = FormatNumber(valor, x) ''x é a quantidade de casas depois da virgula que você quer

    Wennder Santos

    • Marcado como Resposta MSantoli sexta-feira, 28 de março de 2014 14:22
    quarta-feira, 26 de março de 2014 13:51

Todas as Respostas

  • MSantoli, blxx

    Use o String.Format para deixar da forma que precisa:

    ValorTextBox.Text = String.Format("{0:##.##}", Valor)



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 13:11
  • Diego, bom dia!

    Obrigado por tentar me ajudar, mas realmente não sei o que estou deixando de fazer para não conseguir o resultado do que preciso.

    Tentei sua sugestão, inclusive já a havia tentado, fuçando na net em busca de solução mas não deu certo amigo, infelizmente continua igual.

    quarta-feira, 26 de março de 2014 13:16
  • Blzzz,

    Faz o seguinte, posta o seu código aqui, que eu vejo como podemos fazer blxxx



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 13:21
  • Fala MSantoli, blz?

    Tente usar o FormatNumber.

    ValorTextBox.Text = FormatNumber(valor, x) ''x é a quantidade de casas depois da virgula que você quer

    Wennder Santos

    • Marcado como Resposta MSantoli sexta-feira, 28 de março de 2014 14:22
    quarta-feira, 26 de março de 2014 13:51
  • Imports System.Data.OleDb
    
    Public Class Transaçao
        Dim strConexao As String = My.Settings.Servidor
        Dim valor As String
    
        Private Function openConexao() As OleDbConnection
            Dim con As New OleDbConnection
            con.ConnectionString = strConexao
            con.Open()
            Return con
        End Function
    
        Private Sub closeConexao(ByVal con As OleDbConnection)
            If con.State = ConnectionState.Open Then
                con.Close()
            End If
        End Sub
    
        Public Sub ExecuteComando(ByVal consulta As String)
            Dim con As New OleDbConnection()
            Try
                con = openConexao()
                Dim cmdCommand As New OleDbCommand
                With cmdCommand
                    .CommandText = consulta.ToString
                    .CommandType = CommandType.Text
                    .Connection = con
                    .ExecuteNonQuery()
                End With
            Catch ex As Exception
                Throw
            Finally
                closeConexao(con)
            End Try
        End Sub
    
        Public Function GetDataSet(ByVal consulta As String) As DataSet
            Dim con As New OleDbConnection()
            Try
                con = openConexao()
                Dim cmdCommand As New OleDbCommand
                With cmdCommand
                    .CommandText = consulta.ToString
                    .CommandType = CommandType.Text
                    .Connection = con
                    .ExecuteNonQuery()
                End With
                Dim da As New OleDbDataAdapter
                Dim ds As New DataSet
                With da
                    .SelectCommand = cmdCommand
                    .Fill(ds)
                End With
                Return ds
            Catch ex As Exception
                Throw
            Finally
                closeConexao(con)
            End Try
        End Function
    
        Public Function GetDataReader(ByVal consulta As String) As OleDbDataReader
            Dim con As New OleDbConnection()
            Try
                con = openConexao()
                Dim cmdCommand As New OleDbCommand
                With cmdCommand
                    .CommandText = consulta.ToString
                    .CommandType = CommandType.Text
                    .Connection = con
                End With
                Return cmdCommand.ExecuteReader
            Catch ex As Exception
                Throw
            Finally
                closeConexao(con)
            End Try
        End Function
    
        Private Sub TransaçaoBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TransaçaoBindingNavigatorSaveItem.Click
            Me.Validate()
            Me.TransaçaoBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me._BancoTeste_2_0_beDataSet)
    
        End Sub
    
        Private Sub Transaçao_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TransaçaoTableAdapter.Fill(Me._BancoTeste_2_0_beDataSet.Transaçao)
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If MessageBox.Show("Deseja excluir o lançamento " & Me.Cod_TransTextBox.Text & "?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                Me.TransaçaoBindingSource.RemoveCurrent()
                Me.TransaçaoBindingSource.MoveLast()
                Me.TableAdapterManager.UpdateAll(Me._BancoTeste_2_0_beDataSet)
                MessageBox.Show("Lançamento excluido com sucesso!", "Teste Sistemas", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                Me.TransaçaoBindingSource.CancelEdit()
            End If
        End Sub
    End Class
    
    

    quarta-feira, 26 de março de 2014 13:55
  • Olá Msantoli, 

    você postou o código, mas, não postou aonde você atribui valor para a variável Valor.

    Use o FormatNumber que eu sugeri em minha resposta anterior que vai funcionar.

    Wennder Santos

    quarta-feira, 26 de março de 2014 18:44
  • Wennder, 

    Desculpe a minha ignorância, é que estou migrando uma aplicação que possuo do Access para Visual Basic. Devo atribuir o código sugerido por você no evento Load do formulário?

    quinta-feira, 27 de março de 2014 11:05
  • Olá,

    você vai usa-lo quando quiser atribui valor para sua variável. Por exemplo, na linha abaixo estou atribuindo o valor 21 para minha variável Valor, porém, quero que apareça duas casas decimais após a virgula.

    Dim Valor as Decimal
    Valor = FormatNumber(Valor,2)

    Simples, assim.

    Teste e de um retorno.

    Wennder Santos

    quinta-feira, 27 de março de 2014 12:09
  • Wennder,

    Sua sugestão até que funcionou, quando eu abro o formulário, o campo Valor mostra os dados no formato 0,00, com as devidas casas decimais, porém, quando eu avanço ou retrocedo os registros através do DataGrid o Valor retorna sem as casas decimais. 

    Obrigado pela ajuda

    quinta-feira, 27 de março de 2014 16:00
  • Olá,

    você deve estar carregando esse campo em mais de um lugar para isso estar acontecendo. Se você o carrega em mais de um lugar deverá usar o FormatNumber em todos os carregamentos.


    Wennder Santos


    quinta-feira, 27 de março de 2014 17:06
  • Olá Wennder, 

    Não tem jeito, estou carregando o campo apenas em um textbox e depois no DataGrid. Sei que o problema realmente está na minha falta de conhecimento. Pesquisando na net encontrei uma solução chamada HotEditControl um componente que funciona direitinho, porém quando eu rodo a aplicação fora do ambiente do Visual Studio uma mensagem de erro me diz que o componente não foi localizado. Não sei mais o que fazer, já estou com isso ha semanas e já perdi vários fios de cabelos. Desculpe mas é isso aí minha situação!

    sexta-feira, 28 de março de 2014 13:09
  • Olá,

    você já tentou colocar mascara no text box e na grid?

    Wennder Santos

    sexta-feira, 28 de março de 2014 13:55
  • Wennder,

    deu certo!

    Coloquei no evento CellLeave do Grid "TextBox.Text = FormatNumber(valor, x)

    Obrigado!!

    sexta-feira, 28 de março de 2014 14:41