Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cláudio Duarte

Somando horas em um DataGridView no Visual Basic 2010.

Recommended Posts

Bom dia.

 

Tenho um DataGridView que busca no bancos os dados após consulta.

No DataGrid possui uma coluna chamada horas trabalhadas e ao realizar o filtro gostaria de colocar um textbox com a soma dessa coluna.

Estou utilizando o Visual basic 2010. Tentei o seguinte código no click do botão soma:

 

For Each Linha As DataGridViewRow In Me.DgvProjeto.Rows

 

Dim valor As Date

 

If Not Linha.IsNewRow Then

 

'Executa a soma dos valores da coluna 9

valor += Linha.Cells(9).Value

Me.TxtTotal.Text = valor

End If

Next

 

O erro foi: "A conversão da cadeia de caracteres '00:00:0001/01/1900' no tipo 'Date' não é válida."

 

No banco o tipo do dado é DateTime

------------------------------------------------------------------------------------------------------

Recebi outro código como ajuda porém ocorre o mesmo erro:

Segue o código com as modificações:

 

Private Function Total() As Date

'Dim tot As Double = 0

Dim tot As Date

Dim i As Integer = 0

For i = 0 To DgvProjeto.Rows.Count - 1

tot = tot + Convert.ToDateTime(DgvProjeto.Rows(i).Cells("HorasTrabalhadas").Value)

Next i

Return Date.FromOADate(tot.ToOADate())

End Function

 

Private Sub PcxTotalHoras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PcxTotalHoras.Click

 

If DgvProjeto.Rows.Count > 0 Then

TxtTotal.Text = Total().ToString("H:mm")

End If

 

End Sub

 

Poderiam me ajudar?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Tenho um DataGridView que busca no bancos os dados após consulta.

No DataGrid possui uma coluna chamada horas trabalhadas e ao realizar o filtro gostaria de colocar um textbox com a soma dessa coluna.

Estou utilizando o Visual basic 2010. Tentei o seguinte código no click do botão soma:

 

For Each Linha As DataGridViewRow In Me.DgvProjeto.Rows

 

Dim valor As Date

 

If Not Linha.IsNewRow Then

 

'Executa a soma dos valores da coluna 9

valor += Linha.Cells(9).Value

Me.TxtTotal.Text = valor

End If

Next

 

O erro foi: "A conversão da cadeia de caracteres '00:00:0001/01/1900' no tipo 'Date' não é válida."

 

No banco o tipo do dado é DateTime

------------------------------------------------------------------------------------------------------

Recebi outro código como ajuda porém ocorre o mesmo erro:

Segue o código com as modificações:

 

Private Function Total() As Date

'Dim tot As Double = 0

Dim tot As Date

Dim i As Integer = 0

For i = 0 To DgvProjeto.Rows.Count - 1

tot = tot + Convert.ToDateTime(DgvProjeto.Rows(i).Cells("HorasTrabalhadas").Value)

Next i

Return Date.FromOADate(tot.ToOADate())

End Function

 

Private Sub PcxTotalHoras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PcxTotalHoras.Click

 

If DgvProjeto.Rows.Count > 0 Then

TxtTotal.Text = Total().ToString("H:mm")

End If

 

End Sub

 

Poderiam me ajudar?

 

Grato.

 

 

Movido para sessão do .net.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma pergunta (só para confirmar estou tentando fazer aqui),

Você está tentando SOMAR hora no formato DATA ? deste jeito 00:00:00

 

Certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou consegui uma coisa pelo menos, é meio GAMBIARRA mas dá para usar se você não quiser fazer mais nada depois de ter o tempo somado, porque no final SAI uma STRING, acho que até dá para usar a função DATESERIAL e transformar em DATE novamente. Essa é a função para jogar no MATO foi gambi total nem sei se tem função que faz o que eu fiz, se tive me avise kkk abraço !

 

Private Sub btnsoma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsoma.Click

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 = dgvSomaData.Rows.Count - 1

 

While cont >= 0

data1 = dgvSomaData.Rows(cont).Cells("Htrabvend").Value

totDataHora = totDataHora + data1.Hour

totDataMinuto = totDataMinuto + data1.Minute

totDataSegundo = totDataSegundo + data1.Second

cont = cont - 1

End While

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)

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.