none
ReportViewer - agrupamentos personalizaveis RRS feed

  • Pergunta

  • Boa tarde, pessoal

    Tenho um relatório (Report Viewer) onde os dados estão agrupados (Group) por data de vencimento.

    No entanto, preciso oferecer ao usuário outras opções de agrupamento (por categoria, por cliente, etc..). Existe uma forma de trabalhar com os agrupamentos em tempo de execução ou sou obrigado a criar um .rdlc diferente para cada opcao de agrupamento ?

    Qualquer dica qto a melhor forma de fazer, fico grato.

    Estou usando o VS 2005.

    []s


    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications
    quinta-feira, 30 de abril de 2009 19:22

Respostas

  • Robson,

    O agrupamento é feito sobre uma expressão, portanto é completamente flexível. Você pode mudar a expressão de agrupamento baseada em um parametro, por exemplo, digamos que voce tenha um campo Cidade e outro Estado, normalmente o agrupamento de cidade seria =Fields!Cidade.Value e estado =Fields!Estado.Value. Fields é uma collection que pode ser acessada pelo nome, portando você pode criar um parametro que indica em qual campo sera o agrupamento e usar:
    =Fields(Parameters!agrupamento.Value).Value, assim o agrupamento poderia ser por cidade ou estado.

    Espero ter respondido.

    Att
    Boreki
    http://www.boreki.eng.br
    sexta-feira, 1 de maio de 2009 21:42
  • Robson,

    Caso voce use visibilidade, o grupo pai, se for oculto, nao mostrara os grupos filhos. Uma maneira simples de resolver seria usar um grupo "falso" quando o usuario nao selecionar o grupo pai. Por exemplo, digamos que o parametro para grupo pai aceita NULL ou o valor para agrupar categoria, entao voce pode usar a expressao:

    =iif(isnothing(Parameters!grupo.value), "" , Fields(parameters!grupo.value))

    Assim, quando o parametro eh nulo, ele usara a mesma expressao para todos os campos.

    aTT
    BOREKI

    http://www.boreki.eng.br
    segunda-feira, 4 de maio de 2009 15:45

Todas as Respostas

  • Robson,

    O agrupamento é feito sobre uma expressão, portanto é completamente flexível. Você pode mudar a expressão de agrupamento baseada em um parametro, por exemplo, digamos que voce tenha um campo Cidade e outro Estado, normalmente o agrupamento de cidade seria =Fields!Cidade.Value e estado =Fields!Estado.Value. Fields é uma collection que pode ser acessada pelo nome, portando você pode criar um parametro que indica em qual campo sera o agrupamento e usar:
    =Fields(Parameters!agrupamento.Value).Value, assim o agrupamento poderia ser por cidade ou estado.

    Espero ter respondido.

    Att
    Boreki
    http://www.boreki.eng.br
    sexta-feira, 1 de maio de 2009 21:42
  • Boreki,

    Entendi, porém há 2 problemas.

    No meu agrupamento (hoje por data de vencimento), eu coloco a data do vencimento:

    10/01/2009
    xxxxxxxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxxxxxxxx

    10/02/2009
    yyyyyyyyyyyyyyyyyyyyyyy
    yyyyyyyyyyyyyyyyyyyyyyy

    Ou seja, caso o usuário escolha agrupar por categoria, eu preciso, além de agrupar, exibir o nome da categoria ao invés da data.

    Além disso, o segundo problema é que, ao agrupar por categoria, um outro agrupamento deve ser feito pela data do vencimento (dentro do grupo de categorias), dessa forma:

    PAPELARIA
         10/01/2009

         xxxxxxxxxxxxxxx
         xxxxxxxxxxxxxxxx
       
         10/02/2009
         yyyyyyyyyyyyyyyy

    ENERGIA
         01/03/2009
         xxxxxxxxxxxxxxxx

         01/04/2009
         xxxxxxxxxxxxxxxx


    Resumindo:
    Caso escolha agrupar por data vencimento, somente 1 agrupamento.
    Caso escolha agrupar por categoria, deverá haver 2 agrupamentos (categoria + dt.vencimento)
    E ainda preciso exibir a data (ou a categoria) para cada grupo (em negrito nos esquemas acima)

    Vou começar a mexer agora aqui (e posto aqui caso consiga fazer tudo no mesmo rdlc)

    Qualquer sugestão será bem-vinda.

    Obrigado.



    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications
    segunda-feira, 4 de maio de 2009 14:05
  • Olá Boreki

    Ignore o "problema" numero 1, ok. Pelo que voce passou ja é possivel fazer (exibir o nome da categoria).

    Qto ao segundo problema, fiz o relatório com os 2 agrupamentos. O segundo (interno) é o por data vencimento e SEMPRE existirá.

    A questão é qto ao agrupamento externo, que só existirá caso o usuario escolha agrupar por categoria, caso contrario não precisarei dele. Existe uma forma de desabilitá-lo em tempo de execução? Nas propriedades do grupo existe a aba "Visibility", mas nao creio que seja para isso (até tentei mas nao funcionou).

    Como fazer?

    []s

    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications
    segunda-feira, 4 de maio de 2009 14:58
  • Robson,

    Caso voce use visibilidade, o grupo pai, se for oculto, nao mostrara os grupos filhos. Uma maneira simples de resolver seria usar um grupo "falso" quando o usuario nao selecionar o grupo pai. Por exemplo, digamos que o parametro para grupo pai aceita NULL ou o valor para agrupar categoria, entao voce pode usar a expressao:

    =iif(isnothing(Parameters!grupo.value), "" , Fields(parameters!grupo.value))

    Assim, quando o parametro eh nulo, ele usara a mesma expressao para todos os campos.

    aTT
    BOREKI

    http://www.boreki.eng.br
    segunda-feira, 4 de maio de 2009 15:45
  • Grande Boreki

    Deu certinho.

    Só um detalhe é que não consegui usar o isnothing (nem Parameters!CampoAgrupamento.Value=""). O report entrava em loop infinito!

    Então, fiz da seguinte forma:

    =Iif(Parameters!CampoAgrupamento.Value="DtVencimento", "", Fields(Parameters!CampoAgrupamento.Value).Value)

    Ou seja, forcei um valor default "DtVencimento" para quando não for utilizar o primeiro agrupamento.

    Muito obrigado!

    []s
    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications
    segunda-feira, 4 de maio de 2009 23:30
  • E como seria a expressão para agrupar? Tenho um dataset carregado com as informações, possui linhas duplicadas com diferença de um campo. Gostaria de agrupar por esse campo. Na troca de msg não fala como fazer esse agrupamento via expressão.
    Renato Mattos
    terça-feira, 21 de julho de 2009 23:15
  • Parceiro, boa tarde.

    Estou fazendo algo semelhante, porém não está dando certo...

    Montei uma tela "Filtro", onde o usuário define como ele quer o relatório... 

    Cliente De Até
    Nome
    Fantasia
    Estado
    Tipo de Agrupamento
    Ordem do Agrupamento

    Cheguei a criar um parâmetro de expressão, conforme falaram... mas não deu certo

    Porém nesta opção de passar o tipo de agrupamento para o reportview, não está dando certo... Poderiam dar um auxilio ou me passar o exemplo de como poderia estar fazendo isto?

    Agradeço desde já

    sábado, 11 de junho de 2016 19:23