ALGUÉM PODE MELHORAR ESTE CÓDIGO.
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)
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)
Basicamente o que você quer é somar horas, isso?
Exatamente Famigerado.
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:
Mais fácil né?
Abraços!
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!
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!
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!
E se estiver preenchendo o grid usando um List<T>, fica melhor ainda
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
DS2T e JABA.
Não obtive resultado.
Gera erro de conversão.
Não obtive resultado.
Gera erro de conversão.
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.
Vou olhar amanhã.
Tenho um compromisso bem cedo.
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
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
Tópico encerrado , respostas não são mais permitidas