Ir para conteúdo

POWERED BY:

Arquivado

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

Maack

Interagindo com as Rows da GridView

Recommended Posts

Tenho uma coluna de uma listagem, deve ser feito um calculo das rows dessa coluna e exibir um resultado numa footer.por exemplo: Tenho uma grid q lista Nome, Cargo e Horas TrabalhadasNa coluna Horas Trabalhadas será feito um calculo somando as horas e exibindo o resultado dela numa footer.O cod p/ o calculo das horas está pronto, até pq essa informacao estah numa string (hh:mm) onde eu converto p/ int e faço a soma das horas e minutos.O negócio eh!!! Como interagir com as linhas da grid p/ ele poder fazer a soma adequadamente?Derrepente fica mais facil converter minha string p/ DateTime e somar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom galera, depois de pesquisar eu consegui fazer o esquema q ficou assim:Tive que fazer uma listagem onde haveriam os seguintes registros:Nome do Usuário Nome da Tarefa Horas trabalhadasFulano de Tal Tarefa 01 02:05Fulaninho Itamar Tarefa 02 06:15Outro Fulano Tarefa 03 05:30Mai um Fulano Tarefa 04 00:20Resultado 14:10Por motivos de força maior, está sendo guardado no banco as "Horas Trabalhadas" como uma string, entao para poder calcular as horas tive q quebrar essa string, separar as horas dos minutos e converter p/ inteiro separado dos ":".Segue o Codigo do calculo das horas: --------------------------------------------------------------------------------private string SomaHoras(string Valor1, string Valor2) { string[] array1 = Valor1.Split(':'); int horas1 = Convert.ToInt32(array1[0]); int minutos1 = Convert.ToInt32(array1[1]); string[] array2 = Valor2.Split(':'); int horas2 = Convert.ToInt32(array2[0]); int minutos2 = Convert.ToInt32(array2[1]); int Horas = (horas1 + horas2); int Minutos = (minutos1 + minutos2); if (Minutos > 60) { int ValorRestante = (Minutos - 60); Horas = (horas1 + horas2) + 01; Minutos = ValorRestante; } else if (Minutos == 60) { Horas = (horas1 + horas2) + 1; Minutos = 00; } string SomaHoras = Horas.ToString() + ":" + Minutos.ToString().PadLeft(2, '0'); return SomaHoras; }--------------------------------------------------------------------------------Feito isso parti p/ a GridView que era meu problema até entao. O negocio era muito mais simples do que imaginava, somente precisei pagar pegar o valor da "Row.Cell" da Grid e armazenar numa variavel e somar com o valor da "Row.Cell" corrente, pegar esse valor e armazenar na mesma variavel. Depois d carregada toda a grid é soh pegar o valor da variavel e carregar ela na Footer.Segue o Codigo da GridView: --------------------------------------------------------------------------------protected void grvHoras_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[1].BackColor = Color.Beige; try { Soma = SomaHoras(Soma, e.Row.Cells[1].Text); } catch { } } else if (e.Row.RowType == DataControlRowType.Footer) { try { e.Row.Cells[1].Text = Soma; } catch { } } }--------------------------------------------------------------------------------Antes de mais nada é preciso colocar essa linha "string Soma = "00:00";" antes do metodo Page_Load, essa é a variavel que inicia e armazena o resultado das somas. Isso cria um loop até que seja carregada toda a grid.Ele pega o Soma, executa o Metodo e salva o resultado nela mesma, depois ele pega esse resultado e executa o metodo salvando novamente o resultado nela mesma... e assim por diante ateh carregar a grid toda, pegar o valor final da string Soma e carregar na Footer.Bom, sei tbm q o calculo das horas poderia ser feito de uma maneira mais simples, usando TimeSpan que já faz o calculo acrescentando uma hora qnd os minutos chegam a 60 e acrescentando 1 dia qnd as horas ultrapassam 24.Bom, eras isso, lembrando q sou iniciante em programacao e .NET, eh provavel q haja alguma maneira mais simples de fazer isso, mas optei por fazer assim. ^_^

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.