ALGUÉM PODE MELHORAR ESTE CÓDIGO.

OMAR2011 02/02/2017 18:35:40
#471285
Somar horas de uma coluna do Datagridview.
A soma não fica correta.

Dim textoHORA As String
Dim textoMINUTO As String
Dim textoSEGUNDO As String
Dim totDataHora As Long
Dim totDataMinuto As Long
Dim totDataSegundo As Long
Dim concatena_HORARIO As String
Dim cont As Integer
Dim data1 As Date
cont = DataGridView1.Rows.Count - 1

For Each Linha As DataGridViewRow In Me.DataGridView1.Rows
data1 = Linha.Cells([Ô]Hora[Ô]).Value
totDataHora = totDataHora + data1.Hour
totDataMinuto = totDataMinuto + data1.Minute
totDataSegundo = totDataSegundo + data1.Second
cont = cont - 1
Next
If totDataSegundo >= 60 Then
Do While totDataSegundo >= 60
totDataMinuto = totDataMinuto + totDataSegundo / 60
totDataSegundo = totDataSegundo - 60
Loop
End If
If totDataMinuto >= 60 Then
Do While totDataMinuto >= 60
totDataHora = totDataHora + totDataMinuto / 60
totDataMinuto = totDataMinuto - 60
Loop
End If

If totDataHora.ToString.Length = 1 Then
textoHORA = [Ô]0[Ô] & totDataHora.ToString
Else
textoHORA = totDataHora
End If
If totDataMinuto.ToString.Length = 1 Then
textoMINUTO = [Ô]0[Ô] & totDataMinuto
Else
textoMINUTO = totDataMinuto
End If
If totDataSegundo.ToString.Length = 1 Then
textoSEGUNDO = [Ô]0[Ô] & totDataSegundo
Else
textoSEGUNDO = totDataSegundo
End If
concatena_HORARIO = textoHORA & [Ô]:[Ô] & textoMINUTO & [Ô]:[Ô] & textoSEGUNDO
MessageBox.Show(concatena_HORARIO)
KERPLUNK 02/02/2017 18:42:04
#471286
Basicamente o que você quer é somar horas, isso?
OMAR2011 02/02/2017 18:46:45
#471287
Exatamente Famigerado.
DS2T 02/02/2017 18:51:19
#471288
Opa Omar, beleza cara?

A partir do momento que você percorre as linhas do DataGridView e realiza o somatório, fica mais tranquilo fazer o que você deseja.
Segue exemplo:


            TimeSpan s = new TimeSpan(totalHoras, totalMinutos, totalSegundos);
string retorno = new DateTime(s.Ticks).ToString([Ô]HH:mm:ss[Ô]);


Mais fácil né?

Abraços!
DS2T 02/02/2017 18:53:25
#471289
Desculpa, coloquei em C#...

Em VB.NET ficaria assim:

Dim s as new TimeSpan(totalHoras, totalMinutos, totalSegundos)
dim retorno as string = new DateTime(s.Ticks).ToString([Ô]HH:mm:ss[Ô])

Abraços!



KERPLUNK 02/02/2017 18:54:24
#471290
E se estiver preenchendo o grid usando um List<T>, fica melhor ainda
JABA 02/02/2017 19:10:25
#471291
Se os dados do campo hora estiverem vindo no formato [Ô]00:00:00[Ô], é só fazer o seguinte:

dim hora as TimeSpan 

For Each Linha As DataGridViewRow In Me.DataGridView1.Rows
hora = hora + timespan.Parse(Linha.Cells([Ô]Hora[Ô]).Value)
Next

MsgBox hora
OMAR2011 02/02/2017 21:01:32
#471294
DS2T e JABA.
Não obtive resultado.
Gera erro de conversão.
KERPLUNK 02/02/2017 22:00:12
#471295
OMAR2011, divirta-se com um exemplo!
OMAR2011 02/02/2017 22:19:02
#471296
Famigerado, eu tenho uma leve impressão que tu está querendo que eu debande para o Internacional ou Grêmio.
Vou olhar amanhã.
Tenho um compromisso bem cedo.
PLUGSOFTSM 02/02/2017 22:25:40
#471297
Vc pode fazer assim:
Dim DT As DateTime = Nothing
Dim TM As New TimeSpan
For Each Linha As DataGridViewRow In Me.DataGridView1.Rows
DT= DateTime.Parse(Linha.Cells([Ô]Hora[Ô]).FormattedValue)
TM = TM.Add(New TimeSpan(DT.Hour, DT.Minute, DT.Second))
Next
concatena_HORARIO = TM.Hours & [Ô] : [Ô] & TM.Minutes & [Ô] : [Ô] & TM.Seconds
Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas