SOMAR VALOR DE COLUNA LISTVIEW

SANROMAN 23/05/2014 18:32:51
#438458
Olá amigos,

Tenho um campo texto que mostra total da coluna Valor de um listview. Uso o seguinte código:
Private Sub SomarChequeCC()

Dim i As Integer
Dim Soma As Single = 0

For i = 0 To listChequeCC.Items.Count - 1

Soma += CDec(listChequeCC.Items(i).SubItems(3).Text)

Next

txtValorChequeCC.Text = CDec(Soma)

End Sub

o Mesmo campo texto também é usado para mostrar o valor cadastrado no dia corrente. Segue o código:

Private Sub SomarChequeDiaCC()

Dim i As Integer
Dim Soma As Single = 0
Dim dia As Date = Date.Now.Date

For i = 0 To listChequeCC.Items.Count - 1

If listChequeCC.Items(i).Text = dia Then

Soma += CDec(listChequeCC.Items(i).SubItems(3).Text)

End If

Next

txtValorChequeCC.Text = CDec(Soma)

End Sub

Gostaria de usar o mesmo campo texto para mostrar os valores dentro do mês corrente. Ai que mora o perigo, dá erro. Uso o seguinte código:

Private Sub SomarChequeMesCC()

Dim i As Integer
Dim Soma As Single = 0
Dim mes As Integer = Date.Now.Month.ToString

For i = 0 To listChequeCC.Items.Count - 1

If listChequeCC.Items(i).ToString = mes.ToString Then

Soma += CDec(listChequeCC.Items(i).SubItems(3).Text)

End If

Next

txtValorChequeCC.Text = CDec(Soma)

End Sub

A linha: Dim mes as date = date.now.month retorna o mês correramente, mas não consigo formular o if para que o programa me dê o retorno esperado.

Desde já agradeço.

Um abraço
NICKOSOFT 23/05/2014 18:46:04
#438460
não teria q fazer um cast para string no listcheque?
PEGUDO 24/05/2014 15:14:08
#438475
Resposta escolhida
Por quê você não faz essa busca diretamente no banco de dados?

Dim vMes As Byte [txt-color=#007100][ô]Variável que vai guardar o mês escolhido. Exemplo: Janeiro = 1, fevereiro = 2, etc...[/txt-color]

vMes = 4
[txt-color=#e80000][Ô]SELECT coluna_data, coluna_valor FROM sua_tabela WHERE MONTH(coluna_data) =[Ô][/txt-color] & vMes


Aí é só fazer um loop no seu dataReader e ir somando a variável [Ô]Soma[Ô]
SANROMAN 25/05/2014 23:23:35
#438489
Olá Pegudo

Muito obrigado pela dica, realmente e mais lógico filtrar os dados direto do banco de dados.

Fiz como você me indicou e estou tendo um problema. A primeira linha do banco com os dados filtrados não é somada ao total do mês.

O código ficou assim:

Private Sub SomarChequeMesCC()

Dim i As Integer
Dim Soma As Single = 0
Dim mes As String = Date.Now.Month.ToString
Dim banco As String = txtBancoContaCorrente.Text
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT Data, valor FROM TB_Cheque where MONTH(Data) = [ô][Ô] & mes & [Ô][ô] and Banco = [ô][Ô] & banco & [Ô][ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

dr.Read()

If dr.HasRows Then

While dr.Read = True

Soma += CDec(dr([Ô]Valor[Ô])).ToString

End While

End If

txtValorChequeCC.Text = CDec(Soma)

End Sub

Espero que possa me ajudar com essa questão.

Desde já agradeço
GUIMORAES 26/05/2014 10:33:50
#438492
Citação:



Dim i As Integer
Dim Soma As Single = 0
Dim mes As String = Date.Now.Month.ToString
Dim banco As String = txtBancoContaCorrente.Text
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT Data, valor FROM TB_Cheque where MONTH(Data) = [ô][Ô] & mes & [Ô][ô] and Banco = [ô][Ô] & banco & [Ô][ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

Do While dr.Read
Soma += CDec(dr([Ô]Valor[Ô])).ToString
Loop

txtValorChequeCC.Text = CDec(Soma)

End Sub



Tenta usar assim!
SANROMAN 26/05/2014 13:26:01
#438500
Bom dia GUIMORAES123

Já tentei. Acontece a mesma coisa, a primeira referência filtrada não entra na soma.

Já tentei com DO WHILE, UNTIL, WHILE. e o resultado e sempre o mesmo, não soma a primeira referência filtrada.

Estou tentando com FOR/NEXT mas ainda não sei como montar o código pára ler os dados filtrados,

Muito obrigado pela tentativa.


SANROMAN 26/05/2014 16:00:56
#438511
Muito obrigado pelas dicas dos amigos PEGUDO e GUIMORAES123

A ajuda de vocês foi fundamental para que conseguisse resolver o problema.

Estava fazendo Dr.Read duas vezes, ai morava o erro. Retirei a linha dr.Read e mantive a linha Do While dr.Read e funcionou perfeitamente.

O código ficou assim:

Private Sub SomarEncargoMesCC()

Dim Soma As Single = 0
Dim mes As String = Date.Now.Month.ToString
Dim banco As String = txtBancoContaCorrente.Text
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT Valor FROM TB_Encargos where MONTH(Data) = [ô][Ô] & mes & [Ô][ô] and Banco = [ô][Ô] & banco & [Ô][ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

Do While dr.Read()

Soma += CDec(dr([Ô]Valor[Ô])).ToString()

Loop

txtValorEncargosCC.Text = CDec(Soma)

End Sub
.

Valeu.
Tópico encerrado , respostas não são mais permitidas