André Alves de Lima

Talking about Software Development and more…

Agrupamentos Simples no Report Viewer do VS 2010

[Atenção!!! Este artigo tem sua versão em vídeo! Se quiser pular a parte escrita e só assistir o vídeo, dê uma olhada no final do post!]

Olá pessoal, tudo tranquilo?

No post de hoje vou explicar como fazer agrupamentos simples no Report Viewer que acompanha o Visual Studio 2010. Vou falar sobre isso porque, como vocês sabem, o novo Report Viewer conta agora com componentes novos, mais avançados e sofisticados, como o novo Tablix. E, com a chagada das funcionalidades novas do Tablix, uma das features que teve melhorias foi a questão de agrupamentos. Agora conseguimos fazer agrupamentos de várias formas (Column ou Row Groups, do tipo Parent, Child, Adjacent Right e Adjacent Left).

Entretanto, toda essa sofisticação na questão dos agrupamentos acabou confundindo todo mundo que estava acostumado com o jeito antigo de se fazer agrupamentos (botão direito, add group e pronto). Várias questões no fórum da MSDN tratam essa questão de pessoas perdidas com o agrupamento no Report Viewer do VS 2010.

Portanto, neste artigo / vídeo de hoje, vou mostrar uma das maneiras para que vocês consigam criar o mesmo tipo de grupo que vocês estavam acostumados com as versões anteriores.

Primeiramente, para esse exemplo, vamos utilizar a seguinte estrutura:

Nesse DataSet temos uma lista de Atividades. Essas Atividades foram executadas em alguma data por um certo funcionário. Suponham que tenhamos os seguintes dados nesse DataSet:

Com essas informações, gostaria de montar um relatório agrupado por:

G1) Atividades
   G2) Datas
      D) Funcionários

Para conseguirmos um relatório com esse layout, no seu projeto no Visual Studio 2010, adicione um novo item do tipo Report. Não se esqueça que essas informações são válidas para aplicações com Target Framework = .NET Framework 4.0.

No relatório que você criou, abra o ToolBox e arraste um componente do tipo Table no corpo do seu relatório. Na janela Report Data, adicione um novo DataSet no seu relatório apontando para o local em que está a fonte de dados que alimentará o seu relatório.

Feito isso, arraste os campos DESCRICAO, DATA e FUNCIONARIO para as colunas da sua Table, de forma que ela fique parecida com a imagem abaixo:

Com isso, temos uma listagem simples dos dados da nossa tabela. Para criarmos os grupos, clique com o botão direito na linha de detalhe e escolha a opção Add Group -> Parent Group

Na janela que se abre, escolha o campo de agrupamento que, no nosso caso, é o campo DESCRICAO (atividade), já que esse é o primeiro grupo do relatório que estamos querendo fazer. Escolha também a opção para que o Report Viewer crie o Group Header para utilizarmos mais pra frente.

Ao executar essa operação, o Report Viewer cria uma coluna para identificar o agrupamento. Como não precisamos dessa coluna de acordo com o layout que estamos querendo, podemos deletá-la, clicando com o botão direito e escolhendo a opção Delete Columns e Delete Columns Only na caixa de diálogo.

Faça exatamente o mesmo procedimento acima para incluir o segundo grupo, só que agora escolhendo o campo DATA.

Pronto! Com os grupos prontos, basta você customizar a formatação da sua Table para que ela fique parecida com a imagem abaixo (lembrando que o propósito deste artigo não é deixarmos o relatório bonito, mas sim, mostrar como podemos agrupar uma Table de forma simples como você estava acostumado nas versões anteriores):

Para testar o relatório, basta incluir um Form no seu projeto, arrastar da sua ToolBox o componente ReportViewer e escolher o relatório que acabamos de criar. E o resultado vai ser parecido com o que mostramos no início do artigo.

É isso… Conseguiram entender? Se o artigo não foi suficiente, não tem problema! Abaixo segue um vídeo mostrando passo-a-passo como você consegue obter o mesmo resultado. Aí não tem erro! =)

[Observação: para assistir o vídeo em uma qualidade melhor, clique no botão HD do Media Player abaixo]

Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas “bônus” que eu só compartilho por e-mail. Além disso, você já deve ter percebido que eu recebo muitas sugestões de temas e eu costumo dar prioridade às sugestões vindas de inscritos da minha newsletter. Inscreva-se utilizando o formulário logo abaixo.

Por hoje é só. Espero que vocês tenham conseguido entender como podemos fazer o bom e velho agrupamento simples das versões anteriores no Report Viewer do Visual Studio 2010.

Qualquer coisa é só deixar um comentário no post. Até a próxima!

André Alves de Lima.

Newsletter do André Lima

* indicates required



Powered by MailChimp


wordpress counter


50 thoughts on “Agrupamentos Simples no Report Viewer do VS 2010

  • Links da Semana I | Felipe Correa disse:

    […] Agrupamentos simples no report viewer do vs 2010 – André Alves […]

  • Alan Cossari disse:

    Muito interessante o seu post André. Parabéns.

    O que eu não estou satisfeito com o Report Viewer 2010 é que se neste seu exemplo, se você adicionar registros com a mesma data e atividade o suficiente para quebrar a página ele não repete o cabeçalho na página seguinte. No 2008 tinha a opção RepeatOnNewPage. No 2010 não tem isto na Janela de Propriedades eu costumo resolver isto editando diretamente no XML do relatório.

  • Olá André,

    Trabalho muito com relatórios, tanto Report Viewer como Crystal. Gostaria de dar os meus parabéns, bem explicativo e de fácil entendimento, algumas coisas mudaram muito da versão 2008 para a 2010, é bom alguns artigos e MELHOR ainda vídeo-aulas demonstrando como realizar determinada coisa na versão do 2010.

    Bom, parabéns mais uma vez !! Abs

  • Reynaldo disse:

    Olá Amigo, estou tendo um grande problema com esse report viewer, preciso muito que você me ajude!
    Seguinte, eu estou trabalhando com Linq to SQL e estou tentando fazer um monte de coisa nesse ReportViewer e nada da Certo!
    1º: meu select tem funções de agregação do tipo e sum(talcoluna)/count(talcoluna) as NomeColuna
    Eu faço group by “NomeColuna” ….e uso colunas de outras tabelas, um exemplo é que uso Join.
    Me fala ai, como eu faço para chegar nesse resultado no Report Viewer?
    Como eu jogo um “select” dentro desse report viewer e poder especificar cada coluna do que está vindo do meu datatable ou dataset?
    2º Eu tentei usar a dois dataset mas ele não permite, então como irei colocar o nome do cliente do dataset 2 se no dataset 1 só tenho o ID?(resumo: como fazer JOIN dos dataset?) Eu joguei o nomedocliente do primeiro dataset e blz, fui jogar os dados da venda na tela do dataset 1 e dai falou que não permite….eaew, #comofas?

    3º Eu uso consultas do tipo iqueryable, como eu faço para jogar esses dados dentro do reportviewer?

    Obrigado amigo, espero que me ajude ou me forneça algum tipo de material para eu poder consultas coisas avançadas como essa. Obrigado.

    • andrealveslima disse:

      Olá Reynaldo, obrigado pelo comentário.
      Realmente o Report Viewer é um tanto quanto complicado. Eu sempre sugiro que você prepare os dados para o relatório em uma só “view” no banco de dados ou, caso esteja trabalhando com dados em memória, prepare todos os dados em somente uma DataTable e utilize essa DataTable como fonte de dados do seu relatório.
      André Lima

  • Alfeu Duran disse:

    Realmente explicação de ótima qualidade, estava com muita dificuldade para entender essas modificações!

    Muito Obrigado

  • PauloDev disse:

    Boa tarde, Amigo preciso de uma ajuda que nao acho em nenhum lugar, consegui fazer a ligação com o banco de dados tudo certinho, mas quero no proprio formulario colocar um texte e um botao para filtrar o conteudo que eu quero mostrar, mas ta dificil viu, gostaria da sua ajuda

  • Juvenal disse:

    Excelente Post! Ajudou bastante!

    Preciso de uma ajuda, será que alguém já fez?

    Colocar subtotais e totais em relatórios agrupados?

    Muito obrigado,
    Juvenal

  • CARLOS CUNHA disse:

    Parabens cara!!!!
    Excelente demosntração…..

  • Felipe Wolff disse:

    Ótimo tutorial, mas estou com um problema que não consigo resolver,
    tenho uma classe assim

    long id;
    string name;
    list observations;

    o que acontece é que não consigo exibir essa lista de observações.

    Poderia me ajudar?

    • andrealveslima disse:

      Olá Felipe,
      Obrigado pelo comentário. Só não consegui entender a sua dúvida. Como assim você não consegue exibir essa lista de observações?
      André Lima

  • Deraldo disse:

    Bom dia Andre.
    Bom tutorial. Será que vc consegue me ajudar com este problema? Uma vez feito o relatório, ele aparece no ReportView corretamente mas colapsado. Se eu gero um PDF a partir dele o pdf é renderizado também colapsado. Como o relatório é grande, não da para ir abrindo todos os grupos.
    ja procurei e vou continuar procurando mas se vc tiver alguma dica, por favor…

    • andrealveslima disse:

      Olá Deraldo,
      Primeiramente, obrigado pelo comentário!
      Dê uma olhada nesta thread do forum da MSDN americana.. Nela está sendo discutida uma possibilidade de proporcionar ao usuário uma opção de expandir/retrair todas as linhas de um grupo.. Acredito que ela vá te ajudar a solucionar o seu problema..
      Abraço!
      André Lima

  • Marcelo disse:

    Andre, boa tarde.

    Estou usando o VS 2010 (vb.net)

    Estou tendo criar um relatório com o Report Viewer.

    -‘ Criei o dataSet
    – Criei .RDLC
    – Quando entro na tela do relatorio e seleciono
    opção “View”->”ReportData”. Ao clicar em “New”->”DataSet” apresenta o erro
    “Microsoft Visual has encountered a problem and needs to close”.

    O que posso fazer para corrigir esse problema.

    Agradeço a sua ajuda.

    Marcelo

    • andrealveslima disse:

      Marcelo,
      Não sei se você ainda está tendo esse problema, mas, ele é um daqueles difíceis de resolver.. Esse tipo de erro “Microsoft Visual has encountered a problem and needs to close” normalmente acontece quando o Visual Studio (ou algum componente de terceiros ou extensão) crashou e não conseguiu se recuperar.. Eu tentaria fazer um repair no Visual Studio pra ver se ajuda.. Ou ir desabilitando / desinstalando as extensões pra tentar entender se alguma delas está causando esse crash..
      Espero que ajude..
      Abraço!
      André Lima

  • […] entender com facilidade é que, todos os meses, o post mais lido do meu blog sempre acaba sendo um post de 2010 sobre agrupamentos simples no Report Viewer do Visual Studio 2010. Levando em conta essa estatística, achei pertinente abordar de vez em quando o assunto […]

  • Gustavo disse:

    André,

    Parabéns pelo tutorial, eu nunca tinha trabalhado com reportviewer.
    Com esse tutorial consegui evoluir bem no que eu precisava.

    Att,

    Gustavo.

    • andrealveslima disse:

      Olá Gustavo!
      Muito obrigado pelo comentário! Fico feliz em ter ajudado com o tutorial.. Fique atento aos novos posts do blog.. De vez em quando escrevo sobre geração de relatórios no Visual Studio (não só com o ReportViewer, mas também com o Crystal Reports).. Além disso, estou planejando escrever um ebook sobre relatórios com ReportViewer.. Caso ache a ideia interessante, inscreva-se no site para não perder nenhuma novidade..
      Grande abraço!
      André Lima

  • master2014 disse:

    Bom dia, André
    Tenho um simples projeto (Windows Form) utilizando o banco de dados em Access com os campos ID, Nome e Imagem (guarda apenas o caminho da imagem), gostaria de ajuda para inserir as imagens do banco no ReportViewer, pois há vários dias estou tentando alguns códigos, dicas e exemplos dado em video, mas sem sucesso. Apenas aparece um “X” vermelho no lugar das fotos. Não encontrei nada por aquí referente a isso. Estou desenvolvendo em C# no VS 2010 com ACCESS.

    Poderia me ajudar?

    Desde já agradeço a colaboração…Obrigado!

  • […] de um caminho em disco no Report Viewer. Eu respondi a questão no próprio fórum (e também em um comentário de um outro post aqui no blog), mas, como não foi suficiente para resolver o problema do autor da questão, vamos ao […]

  • Marcos Paulo disse:

    Bom dia André,
    Nem sei se você está respondendo aqui ainda, mas se estiver, preciso de sua ajuda.
    Fiz um relatório como no seu tutorial, mt bom por sinal, parabéns. Ele está funcionando, porém estou com um problema no HeaderGroup. Ele agrupa bonitinho, faz a quebra por página, mas na hora que exibe o header, ele não traz o valor de cada grupo não, só mostra o primeiro valor de grupo, tipo, tenho 7 agrupamentos diferentes, todos separados por página, mas no HeaderGroup só exibe o mesmo valor sempre. Utilizei aquele método de alterar o Static do RowGroup para exibir em cada página. Você sabe me dizer se tem que fazer mais alguma coisa para exibir o valor correto de cada agrupamento?? fico no aguardo caso você ainda acompanhe o post.
    Abraço…

    • andrealveslima disse:

      Olá Marcos, obrigado pelo comentário! Porém, não consegui visualizar o seu problema.. Para facilitar, me mande um email (veja o endereço na página “Sobre”) com screenshots mostrando como está o designer do relatório, como ele está sendo exibido no preview e como ele deveria estar se comportando..

      Abraço!
      André Lima

  • […] “Categoria“. Caso você não saiba como fazer isso, confira o meu outro artigo sobre agrupamentos simples no Report Viewer. O resultado deve ficar parecido com as imagens a […]

  • […] 1) Agrupamentos Simples no Report Viewer do VS 2010 Eu já tinha reparado que esse é disparado o post mais lido do meu blog. Se olharmos o relatório de posts mais lidos de 2013, ele também ficou em primeiro. Esse ano não foi diferente. Com quase três vezes mais acessos do que o segundo colocado, esse post sobre agrupamentos simples no Report Viewer do Visual Studio 2010 foi novamente o campeão desse ano. Isso só me ajuda a validar a ideia de escrever um ebook sobre o ReportViewer. Além disso, estou utilizando um “lead magnet” com uma lista de recursos do Report Viewer para atrair novas pessoas para a minha newsletter. […]

  • Jean Sousa disse:

    Bom dia André!

    Muito seu artigo. Sou iniciante no reportviewer e estou com uma dúvida gigantesca. Estou desenvolvendo um relatório e preciso adicionar o agrupamento ao final da linha, pois preciso calcular uma média de acordo com o agrupamento. É possível adicionar o agrupamento ao final da linha?

    • andrealveslima disse:

      Olá Jean, obrigado pelo comentário!

      Não consegui entender muito bem o que você está querendo dizer com “agrupamento ao final da linha”.. Será que você poderia explicar com mais detalhes? De preferência com screenshots mostrando o resultado que você está esperando.. Se quiser mandar mais detalhes por e-mail, fique à vontade: contato [arroba] andrealveslima [ponto] com [ponto] br..

      Abraço!
      André Lima

  • Piter Machado disse:

    Cara, me passaram do nada aqui no projeto um relatório para eu diminuir o número de campos, de modo que o relatório coubesse em uma folha a4 em landscape.
    Eu não sabia quase nada sobre como mexer em relatório .rldc. Me sugeriram que eu usasse agrupamentos para tornar alguns campos em grupos e assim removê-los da table principal do relatório. Eu não tinha ideia de como fazê-lo.
    Mas eis que encontro esse teu vídeo passo-a-passo e aí eu consegui fazer a tarefa! Muito obrigado mesmo!
    E o pessoal que comentou linkando outro site que explica como fazer os headers de grupos aparecem de novo quando começa uma nova página do relatório também foram de muita ajuda!
    Obrigado.

    • andrealveslima disse:

      Olá Piter, muito obrigado pelo comentário! Fico muito feliz que os meus artigos / vídeos tenham te ajudado na sua “saga” com o Report Viewer.. :)

      Caso surja alguma dúvida, é só entrar em contato..

      Um grande abraço!
      André Lima

  • AndréMartinsSevero disse:

    Boa tarde André, tudo certo? Já não é a primeira vez que te escrevo rsrs. Como seus artigos envolvendo o Report Viewer são tão bons talvez você consiga tirar uma dúvida minha. Eu tenho um datatable que recebem valores medidos de equipamentos, por exemplo equipamento1, valorX, equipamento2, valorY, classificados em colunas por nome do equipamento e por valor recebido, ou seja, são todos misturados. Neste datatable eu também armazeno a hora e a data que esse valor for medido para filtrar no relatório. Quando vou filtrar os dados por data, hora e nome, tudo ocorre bem, porém, quando tento filtrar mais de um equipamento o relatório fica vazio. Já tentei mudar muitas coisas, mas nada parece resolver. Será que é possível criar o relatório dessa maneira que quero fazer?

    Desde já agradeço a ajuda!

    Muito Obrigado.

    • andrealveslima disse:

      Olá André, muito obrigado pelo comentário! Agradeço o elogio.. :)

      Quanto à sua questão, teoricamente você poderia fazer isso com parâmetros “multi-valor”.. Veja como passar dados em parâmetros desse tipo neste link:

      Passing a Multi-value parameter to the ReportViewer control

      Como é que você tentou fazer e não deu certo? Poderia dar mais detalhes?

      Abraço!
      André Lima

      • AndréMartinsSevero disse:

        Olá André, obrigado pela ajuda!

        Não sei se o problema está relacionado aos parâmetros. Eu criei 3 deles, equip1, equip2 e equip3, cada um com a string que representa o nome do equipamento para ser filtrado e exibido.

        A maneira que eu tentei fazer foi atribuindo os groups na seguinte ordem: id, data, hora, nome, valor, nome, valor, nome, valor. Fiz todos como parent, depois id, data e hora como parent e os demais como child, e por último id, data e hora como parent, o nome como parent e o valor respectivo ao nome como child.

        No datatable está da seguinte maneira:

        id | data | hora | equipamento | valor |
        1 | 17/05/2017 | 13:30 | equip1 | X |
        2 | 17/05/2017 | 13:30 | equip2 | Y |
        3 | 17/05/2017 | 13:31 | equip1 | A |
        4 | 17/05/2017 | 13:31 | equip2 | B |

        A lógica que eu segui é que o filtro de data e hora vai ser sempre o mesmo para qualquer equipamento.

        Como na tabela eu tenho misturado os nomes dos equipamentos, creio que na hora de fazer o segundo filtro aconteça alguma treta que impede que os dados sejam exibidos.

        Eu tentei fazer como equação na visibilidade, não funcionou também. Tentei inserir o filtro no arquivo xsd do data table, mas sem êxito.

        Penso em alterar o data table ou fazer três tabelas no relatório.

        Peço desculpas pelo texto gigante, mas eu imagino como deve ser ruim ter de ficar tentando entender o nosso problema. Procurei ser mais claro possível.

        Agradeço muito a força!

        André.

        • andrealveslima disse:

          Olá André!

          Não entendi muito bem porque você criou todo esse monte de grupos.. Os seus dados já não estão vindo prontos da DataTable? Então era só filtrar o Tablix com a expressão que você quiser..

          Mas, enfim, se você estiver tendo dificuldade com filtros no relatório, talvez uma ideia seria já mandar os dados filtrados para o relatório.. Uma opção para isso é trabalhar com DataViews.. Eu mostrei como fazer isso neste artigo:

          Mandando uma DataTable filtrada para o Report Viewer

          Abraço!
          André Lima

          • AndréMartinsSevero disse:

            Opá André.

            Esqueci de mencionar essa parte.

            O relatório deveria ser exibido mais ou menos da seguinte maneira:

            data | hora | nome | valor | nome | valor |
            data | hora | equip1 | X | equip2 | Y |
            data | hora | equip1 | A | equip2 | B |
            data | hora | equip1 | C | equip2 | D |

            Ou seja, eu teria que filtrar o campo nome várias vezes. Essa é a parte que não estou conseguindo fazer.

            Vou tentar utilizar o dataview como você indicou e mudar o data table criando uma coluna pra cada equipamento.

            Muito obrigado pela ajuda e paciência André!

          • andrealveslima disse:

            Olá André!

            Entendi.. Tenta aí com DataView e, caso você não consiga (ou se realmente fizer questão de implementar direto no relatório), me manda o seu arquivo rdlc para eu dar uma olhada (contato [arroba] andrealveslima [ponto] com [ponto] br)..

            Abraço!
            André Lima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *