SOMA HORAS EM UM DATAGRIDVIEW VISUAL BASIC 2010
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.
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.
Troca o campo DateTime para Time
E posta o resultado
E posta o resultado
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()
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()
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
Obrigado
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
FormProjeto.DtpHoraInicio.Text = LinhaSelecionada.Cells([Ô]HoraInicio[Ô]).Value.ToString
FormProjeto.DtpHoraFinal.Text = LinhaSelecionada.Cells([Ô]HoraFim[Ô]).Value.ToString
FormProjeto.DtpHorasTrab.Text = LinhaSelecionada.Cells([Ô]HorasTrabalhadas[Ô]).Value.ToString
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
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
Sim, terá que fazer como você fez com os textboxs
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.
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