LISTVIEW - FORMATA?ÃO MOEDA

ABREU 05/02/2016 12:10:51
#457141
Bom dia para todos.
A saúde me deixou afastado por muito tempo, mas volto com novo pedido de socorro!

Tenho um formulário que exibe meu Boletim de Caixa numa ListView (VB Net 2012).

Porém, os valores de “Debitos” e de “Creditos” são mostrados na ListView em números inteiros, embora estes campos estejam tipificados no banco de dados como “Unidade Monetária” (Access 2007).

Como faço para colocar as colunas da ListView (Debitos e Creditos) em formato “Moeda”, mostrando inclusive o valor dos centavos?

Eis o meu código:

Imports System.Data.OleDb

Public Class frmCaixa
Dim BDCon As New OleDbConnection
Dim ds As New DataSet
Dim dr As DataRow
Dim dt As New DataTable

Private Sub frmCaixa _Load(sender As Object, e As EventArgs) Handles MyBase.Load
BDCon.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
BDCon.Open()
End Sub

Private Sub ExibeValores()
Try
Dim Sql As String = [Ô]Select * from TabCaixa[Ô]
ds.Reset()
Dim adptr As New OleDbDataAdapter(Sql, BDCon)
adptr.Fill(ds)
dt = ds.Tables(0)
ListView1.Items.Clear()
Dim Item As ListViewItem
For Each dr In dt.Rows
Item = ListView1.Items.Add(dr.Item([Ô]Id[Ô]))
Item.SubItems.Add(dr.Item([Ô]Data[Ô]))
Item.SubItems.Add(dr.Item([Ô]Historico[Ô]))
‘
Item.SubItems.Add(dr.Item([Ô]Debitos[Ô]))
Item.SubItems.Add(dr.Item([Ô]Creditos[Ô]))
‘
Next
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & ex.Message)
End Try
End Sub
DS2T 05/02/2016 12:21:40
#457143
Resposta escolhida
Tente algo do tipo:

Dim debito as Decimal = Convert.ToDecimal(dr.Item([Ô]Debitos[Ô]))
Item.SubItems.Add(debito.ToString([Ô]R$ 0.00[Ô]))


usando String.Format também dá.
OMAR2011 05/02/2016 12:51:33
#457144
DST2, se o campo da tabela está em formato de moeda não seria mais fácil usar o formatCurrency.

Item.SubItems.Add(FormatCurrency(dr.Item([Ô]Debitos[Ô])))
Item.SubItems.Add(FormatCurrency(dr.Item([Ô]Creditos[Ô])))
DS2T 05/02/2016 13:01:45
#457145
Opa Omar2011, belezinha cara?

Então, é uma boa pedida também. Mas eu não uso esse método por dois motivos:

O primeiro é por compatibilidade com o .NET Framework. Esse é um método nativo do Visual Basic, que não faz parte do framework. E eu acredito que em versões futuras, essas funções do VB começarão a dar Warning falando que é um método ultrapassado, pra você usar algo nativo do .NET Framework, assim como aquelas Mid, Instr, Len, GetAttr e tantas outras. Pode ser paranoia minha hahahaha Provavelmente é...

O segundo é por causa da flexibilidade. Nesse caso, nem tanto. Porque ele quer o padrão que está configurado no sistema mesmo. Mas até depois pra se ele quiser alguma modificação [Ô]Ahh, agora quero um número inteiro[Ô]. [Ô]ahh, agora quero um número só com uma casa decimal[Ô]... etc.. Vai ser fácil dele resolver isso.

Abração aí cara!
ABREU 05/02/2016 18:44:02
#457187
Caro DS2T,

A sua orientação foi de extrema validade. A ListView está rodando perfeitamente.

Modifiquei apenas um detalhe no seu código por uma questão estética e não por questão técnica:

a) Item.SubItems.Add(debito.ToString([Ô]R$ 0.00[Ô])) – Exibe: R$ 10000,00

b) Item.SubItems.Add(debito.ToString([Ô]#,###.00[Ô])) – Exibe: 10.000,00

O problema dos “centavos” é de somenos importância...

Um forte abraço com meus agradecimentos.
ABREU 06/02/2016 07:33:37
#457238
Caro DS2T,

A questão dos centavos foi mera falta de atenção da minha parte: embora no banco de dados eu tenha tipificado o campo “Debitos” como “Unidade Monetária” (Access 2007), no código de Inclusão eu estava dimensionando a variável como Integer quando devia dimensioná-la como Decimal.

Errado:
Dim debito As Integer
debito = CInt(Me.txtDébito.Text)
Resultado:
Me.txtDébito.Text = R$ 50,78
A ListView exibe R$ 51,00

Correto:
Dim debito As Decimal
debito = CDec(Me.txtDébito.Text)
Resultado:
Me.txtDébito.Text = R$ 50,78
A ListView exibe R$ 50,78
DS2T 07/02/2016 03:02:20
#457269
Que bom que te ajudei cara!
Se puder, feche o tópico.

Abração!
Fica bem.
Tópico encerrado , respostas não são mais permitidas