Cláudio Duarte Postado Junho 19, 2011 Denunciar Share Postado Junho 19, 2011 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.RowsDim valor As DateIf Not Linha.IsNewRow Then'Executa a soma dos valores da coluna 9valor += Linha.Cells(9).ValueMe.TxtTotal.Text = valorEnd IfNextO 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 = 0Dim tot As DateDim i As Integer = 0For i = 0 To DgvProjeto.Rows.Count - 1tot = tot + Convert.ToDateTime(DgvProjeto.Rows(i).Cells("HorasTrabalhadas").Value)Next iReturn Date.FromOADate(tot.ToOADate())End FunctionPrivate Sub PcxTotalHoras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PcxTotalHoras.ClickIf DgvProjeto.Rows.Count > 0 ThenTxtTotal.Text = Total().ToString("H:mm")End IfEnd SubPoderiam me ajudar?Grato. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Xistyle Postado Junho 21, 2011 Denunciar Share Postado Junho 21, 2011 Cara dá uma modificada nisso e ve se resolve teu problema:Dim Total As DateTime = DateTime.Now; For (i = 0 To dgvProjeto.Rows.Count - 1) '# Aqui você deve fazer a conversão das suas horas para double, no parâmetro do AddHours Total = Total.AddHours(dgvProjeto.Rows(i)("HorasTrabalhadas").ToString()); Next Dim ts As TimeSpan = new TimeSpan.FromHours(Total.ToOADate()); MessageBox.Show(string.Format("{0} {1}",ts.Hours, ts.Minutes));Existem algumas maneiras de você fazer essa conversão. Basta dar uma olhada no Google. Eu particularmente alimentaria a grid fazendo duas colunas: uma com o dia e outra com a hora, usando o DatePart() do SQL. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Cláudio Duarte Postado Junho 25, 2011 Autor Denunciar Share Postado Junho 25, 2011 Xistyle boa noite e muito obrigado pela cooperação.Resolvi o problema simplesmente trocando no banco de dados de DateTime para Time.A soma foi realizada com sucesso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Cláudio Duarte
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.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.