Ir para conteúdo

POWERED BY:

Arquivado

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

Davis

Gridview com subtotal

Recommended Posts

Tenho que extrair os dados de algumas tabelas agrupando pelo código de ação. Ok, isso eu já fiz. O problema é que eu também tenho que exibir um subtotal para cada ação. Abaixo um exemplinho de como deveria ficar a gridview:

 

ID Ação | Nome | Doação00001   | aaaa | R$ 1000001   | bbbb | R$ 20	   Subtotal: R$ 3000002   | aaaa | R$ 500002   | aaaa | R$ 1500002   | aaaa | R$ 25	   Subtotal: R$ 45			  Total: R$ 75

Tem alguma maneira de se fazer isso? O SQL tá mais ou menos assim:

SELECT id_acao, nome, valor FROM Acoes GROUP BY id_acao

 

Então? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro que no evento RowDataBound voce verifique se a linha atual eh o rodape, ou seja, o footer do GridView e execute um novo SQL com a soma, ou ate mesmo va' somando linha por linha e depois exiba o total no footer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se estiver usando o SQL Server, tem a função COMPUTE, com ela é possível realizar sub-totais e totais

 

exemplo:

set nocount ondeclare @tab table (IDAcao int, Nome varchar(10), doacao money)insert into @tab (IDAcao, Nome, doacao) values (1, 'aaaa', 10)insert into @tab (IDAcao, Nome, doacao) values (1, 'bbbb', 20)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 5)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 15)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 25)select IDAcao, Nome, doacao from @taborder by IDAcaocompute sum(doacao) by IDAcaocompute sum(doacao)
só que desta forma irá gerar múltiplos result-sets (por grupo)

 

resultado da query acima:

IDAcao	  Nome	   doacao				----------- ---------- --------------------- 1		   aaaa	   10.00001		   bbbb	   20.0000					   sum					   =====================					   30.0000IDAcao	  Nome	   doacao				----------- ---------- --------------------- 2		   aaaa	   5.00002		   aaaa	   15.00002		   aaaa	   25.0000					   sum					   =====================					   45.0000					   sum					   =====================					   75.0000

Compartilhar este post


Link para o post
Compartilhar em outros sites

descobri essa tb. WITH ROLLUP

 

tb. faz somatórios, só que permanece no mesmo result-set, desta forma creio que não vai ter problemas para mostrar no gridview:

 

set nocount ondeclare @tab table (IDAcao char(5), Nome varchar(10), doacao money)insert into @tab (IDAcao, Nome, doacao) values (1, 'aaaa', 10)insert into @tab (IDAcao, Nome, doacao) values (1, 'bbbb', 20)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 5)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 15)insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 25)select 	case when (grouping(IDAcao)=1) then 'TOTAL'	else isnull(IDAcao, 'desconhecido') end as IDAcao, 	case when (grouping(Nome)=1) then 'SUB-TOTAL'	else isnull(Nome, 'desconhecido') end as IDAcao,	sum(doacao) as doacao from @tabgroup by IDAcao , Nome WITH ROLLUP
RESULTADO:

IDAcao IDAcao	 doacao				------ ---------- --------------------- 1	  aaaa	   10.00001	  bbbb	   20.00001	  SUB-TOTAL  30.00002	  aaaa	   45.00002	  SUB-TOTAL  45.0000TOTAL  SUB-TOTAL  75.0000

Compartilhar este post


Link para o post
Compartilhar em outros sites

e tem tb. o CUBE

 

na query do exemplo anterior se na linha final trocar WITH ROLLUP por WITH CUBE, no final do resultado é adicionado os totais pro grupo (IDAcao)

resultado:

IDAcao IDAcao	 doacao				------ ---------- --------------------- 1	  aaaa	   10.00001	  bbbb	   20.00001	  SUB-TOTAL  30.00002	  aaaa	   45.00002	  SUB-TOTAL  45.0000TOTAL  SUB-TOTAL  75.0000TOTAL  aaaa	   55.0000TOTAL  bbbb	   20.0000

Compartilhar este post


Link para o post
Compartilhar em outros sites

descobri essa tb. WITH ROLLUP

 

tb. faz somatórios, só que permanece no mesmo result-set, desta forma creio que não vai ter problemas para mostrar no gridview:

 

set nocount on
declare @tab table (IDAcao char(5), Nome varchar(10), doacao money)
insert into @tab (IDAcao, Nome, doacao) values (1, 'aaaa', 10)
insert into @tab (IDAcao, Nome, doacao) values (1, 'bbbb', 20)
insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 5)
insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 15)
insert into @tab (IDAcao, Nome, doacao) values (2, 'aaaa', 25)

select 
	case when (grouping(IDAcao)=1) then 'TOTAL'
	else isnull(IDAcao, 'desconhecido') end as IDAcao, 
	case when (grouping(Nome)=1) then 'SUB-TOTAL'
	else isnull(Nome, 'desconhecido') end as IDAcao,
	sum(doacao) as doacao 
from @tab
group by IDAcao , Nome 
WITH ROLLUP

RESULTADO:

IDAcao IDAcao	 doacao				
------ ---------- --------------------- 
1	  aaaa	   10.0000
1	  bbbb	   20.0000
1	  SUB-TOTAL  30.0000
2	  aaaa	   45.0000
2	  SUB-TOTAL  45.0000
TOTAL  SUB-TOTAL  75.0000
Estou precisando de algo parecido com o que você solucionou, poderia me ajudar?

Preciso fazer um fluxo de caixa, segue em anexo a imagem de como gostaria, se puder me ajudar nas tabelas e na consulta, fico agradecido.

 

Imagem Postada

 

 

obs: estou noites sem dormir pesquisando uma maneira de resolver isso. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que a maneira mais fácil é fazer como o eriva comentou, mas ele fica um pouco restrito, não tem como fazer muita coisa.

O legal seria usar o RowDataBound como o juliano disse, vai somando os valores das linhas e quando chegar no footer você imprime a soma.

 

Tem um exemplo aqui [1], não é o melhor, mas ajuda.

 

[1] http://forum.devmedia.com.br/viewtopic.php...d07981d108b065e

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que a maneira mais fácil é fazer como o eriva comentou, mas ele fica um pouco restrito, não tem como fazer muita coisa.

O legal seria usar o RowDataBound como o juliano disse, vai somando os valores das linhas e quando chegar no footer você imprime a soma.

 

Tem um exemplo aqui [1], não é o melhor, mas ajuda.

 

[1] http://forum.devmedia.com.br/viewtopic.php...d07981d108b065e

Desculpe, esqueci de informar que sou iniciante e estou usando php com mysql.

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.