SOMA HORAS EM UM DATAGRIDVIEW VISUAL BASIC 2010

CLAUDIOD 19/06/2011 14:35:23
#377193
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 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 TxtTotalHoras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtTotalHoras.Click

If DgvProjeto.Rows.Count > 0 Then
TxtTotal.Text = Total().ToString([Ô]H:mm[Ô])
End If

End Sub

Poderiam me ajudar?

Grato.
ADHEL 20/06/2011 08:55:31
#377226
Resposta escolhida
Troca o campo DateTime para Time
E posta o resultado
CLAUDIOD 20/06/2011 19:23:09
#377281
ADHEL, show de bola, deu certo com o seguinte código abaixo:

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

Mas está ocorrendo outro erro, veja se pode me ajudar:
No DataGridView ao clicar 02 vezes na linha ele me abria o formulário com o registro selecionado, porém, ao mudar de DateTime para Time co clicar na linha aparece a mensagem conforme abaixo em vermelho, veja se pode me ajudar.

Muito obrigado pela solução do problema da soma.

Dim LinhaSelecionada As DataGridViewRow

LinhaSelecionada = DgvProjeto.CurrentRow

FormProjeto.TxtIdProjeto.Text = LinhaSelecionada.Cells([Ô]IdProjeto[Ô]).Value
FormProjeto.CboxCodProjeto.Text = LinhaSelecionada.Cells([Ô]CodProjeto[Ô]).Value
FormProjeto.TxtCliente.Text = LinhaSelecionada.Cells([Ô]Cliente[Ô]).Value
FormProjeto.TxtSite.Text = LinhaSelecionada.Cells([Ô]Site[Ô]).Value
FormProjeto.CboxFuncionario.Text = LinhaSelecionada.Cells([Ô]Funcionario[Ô]).Value
FormProjeto.TxtCodFuncionario.Text = LinhaSelecionada.Cells([Ô]CodFuncionario[Ô]).Value
FormProjeto.MskData.Text = LinhaSelecionada.Cells([Ô]Data[Ô]).Value
FormProjeto.DtpHoraInicio.Text = LinhaSelecionada.Cells([Ô]HoraInicio[Ô]).Value - [txt-color=#e80000]A conversão do tipo [ô]TimeSpan[ô] no tipo [ô]String[ô] não é válida[/txt-color].
FormProjeto.DtpHoraFinal.Text = LinhaSelecionada.Cells([Ô]HoraFim[Ô]).Value
FormProjeto.DtpHorasTrab.Text = LinhaSelecionada.Cells([Ô]HorasTrabalhadas[Ô]).Value
FormProjeto.CboxStatus.Text = LinhaSelecionada.Cells([Ô]Status[Ô]).Value
FormProjeto.TxtObs.Text = LinhaSelecionada.Cells([Ô]Obs[Ô]).Value

FormProjeto.Show()
CLAUDIOD 21/06/2011 09:16:46
#377339
Ah sim ADHEL, os campos de Horas (HoraInicio, HoraFim e HorasTrabalhadas são do tipo DataTimePickert) e estão com o formato de HH:mm.

Obrigado
ADHEL 21/06/2011 14:00:34
#377385
Tenta assim


FormProjeto.DtpHoraInicio.Text = LinhaSelecionada.Cells([Ô]HoraInicio[Ô]).Value.ToString
FormProjeto.DtpHoraFinal.Text = LinhaSelecionada.Cells([Ô]HoraFim[Ô]).Value.ToString
FormProjeto.DtpHorasTrab.Text = LinhaSelecionada.Cells([Ô]HorasTrabalhadas[Ô]).Value.ToString

CLAUDIOD 21/06/2011 15:41:23
#377418
ADHEL deu certo muito obrigado.
Estou começando agora em programação e ainda tenho algumas dificuldades.
Suas orientações foram perfeitas, muito obrigado novamente.
Deixa te perguntar uma dúvida:
Se eu utilizar o MaskedTextBox para os campos de hora ficaria do mesmo jeito para fazer os calculos no formulário?
Por exemplo ao digitar a hora inicio e a hora fim no campo de calculo ele seria realizado normalmente sem fazer conversões ou preciso fazer as mesmas correções conforme o código que coloquei no botão calcular que segue abaixo?

Private Sub CalculoHoras()
Dim resultado As TimeSpan
Dim Data1 As Date = Date.Parse(DtpHoraInicio.Text)
Dim Data2 As Date = Date.Parse(DtpHoraFinal.Text)
If Data2 < Data1 Then
MsgBox([Ô]O campo hora final não pode ser menor que o campo hora inicio![Ô])
DtpHoraFinal.Text = [Ô][Ô]
DtpHoraFinal.Focus()
Else
resultado = Data2 - Data1
DtpHorasTrab.Text = resultado.ToString
End If
End Sub
ADHEL 21/06/2011 16:06:58
#377427
Sim, terá que fazer como você fez com os textboxs

CLAUDIOD 21/06/2011 16:15:33
#377431
Testei e deu certo, muito obrigado.
Não querendo abusar mas abusando.
Poderia me enviar seu email para que possa estar conversando e trocando ideias com você sobre programação?
Se sim, segue meu email claudiod@cinque.com.br

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