none
mostrando dados de forma horizontal RRS feed

  • Pergunta

  • olá, estou usando crystal com vs05 e c#.

     

    quando adicionamos um field numa section do relatorio

     

    e esse field retorna varios dados, aí os dados sao mostrados um embaixo do outro né:

     

    PATO BRANCO

    CURITIBA

    SAO PAULO

    RIO DE JANEIRO

    FLORIANOPOLIS

     

    perfeito!.

     

    mas eu gostaria de mostra-los de forma horizontal e com separação por uma LINE, tem algum jeito?

     

    PATO BRANCO            |                   CURITIBA                    |           SAO PAULO

    RIO DE JANEIRO          |                  FLORIANOPOLIS         |

     

    abraços

    sexta-feira, 7 de novembro de 2008 10:50

Respostas

  • A primeira coisa que você precisa é na sua query trazer o rownumber sequencial dos registros, você pode fazer isso usando a função ROW_NUMBER to sql server. Então a sua query ficaria +- assim (Sales Territory é uma tabela do Adventureworks):

     

    Code Snippet

    SELECT
       ROW_NUMBEr() OVER (ORDER BY SalesTerritory.Name ASC) as Linha,
       SalesTerritory.Name,
       SalesTerritory.[Group]
    FROM
      SalesTerritory

     

     

    Se você estiver usando outro DB provavelmente tem alguma função equivalente para trazer o numero de linhas.

     

    Para o relatório, crie um relatório em branco.

    Adicione uma matrix.

    No campo 'Data' Adicione o campo Nome (=First(Fields!Name.Value))

    Clique com o botao direito onde está escrito Columns / Edit Group.

    Na expressão do grupo, coloque o seguinte:

    Code Snippet

    =Ceiling(Fields!Linha.Value mod 3)

     

    Clique com o botao direito onde está escrito Row/ Edit Group.

    Na expressão do grupo, coloque o seguinte:

    Code Snippet

    =Ceiling(Fields!Linha.Value / 3)

     

     

    That's it.

    Att

    Boreki

     

    quinta-feira, 13 de novembro de 2008 22:46

Todas as Respostas

  • Olá Gionanni,

     

    Neste caso vc precisa fazer um relatório do tipo Cross-Tab (Essa opção existe no Crystal Reports e no ReportViewer).

     

    Nestes links vc encontra um exemplo de como fazer (Com Crystal Reports e ReportViewer)

    http://aspalliance.com/1041_Creating_a_Crosstab_Report_in_Visual_Studio_2005_Using_Crystal_Reports.5

    http://www.gotreportviewer.com/matrices/index.html

     

    Além disso, ontem foi publicado o meu terceiro vídeo da série sobre a construção de relatórios (eu teno um exemplo com Cross-Tab com ReportViewer)

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos com vários exemplos de como construir relatórios com os componentes, licença, distribuição, service packs, etc.):

     

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     

     

    [ ]'s

     Laércio.


    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    sexta-feira, 7 de novembro de 2008 12:56
    Moderador
  •  

    olá amigo, me desculpa mas os links nao ajudaram muito..

    e seu terceiro video tem o exemplo com o reportviewer :/

     

    precisava de um artigo em portuga pra fazer isso...

    sexta-feira, 7 de novembro de 2008 16:37
  • será que nao consigo fazer atraves de 3 formulas(ja que vai ter 3 colunas)?

     

    sexta-feira, 7 de novembro de 2008 16:44
  • cara a minha ideia é fazer 3 formulas

     

    que serao as 3 colunas

     

    pelo que eu saiba, dentro de umas formulas para exibir um campo qualquer, é como se tivesse um FOR dentro, um looping.

     

    nao teria como eu descobrir o total de linhas que vou ter da minha tabela, dividir por 3 e entao verificar, coisa assim:

     

    9 linhas fora retornadas

     

    ai ficaria no meu relatorio

     

     

    formula1      |           formula2         |        formula3

     

     

    1                 |                 2             |               3

    4                 |                 5             |               6

    7                 |                 8             |               9

     

     

    onde na primeira formula faz-se algum if que mostra apenas o campo quando a linha for 1 ou 4 ou 7

    e as outras colunas a mesma coisa, intende?

    sexta-feira, 7 de novembro de 2008 17:06
  • Geovani,

     

    Você pode criar uma matrix com uma grupamento baseado em expressão para dar esse resultado que voce quer. Coloque (ou crie) um campo que contenha o ROWID na sua query.

     

    Na Matrix crie um grupo nas colunas usando uma expressão semelhante a:

    Code Snippet
    =CEILING(CINT(Fields!RowID.Value) MOD 3)

     

     

    No grupo de detalhe da linha use a expressão:

    Code Snippet

    =CEILING(CINT(Fields!RowID.Value) / 3)

     

     

    No Detail da Matrix coloque o nome do campo que você quer.

     

    O Rowid deve ser sequencial, nesse caso o que ocorre é o seguinte:

     

    ROWID    LINHA    COLUNA

    1                1                1

    2                1                2

    3                1                0

    4                2                1

    5                2                2

    6                2                0

    7                3                1

     

    Ou seja, na sequencia ele vai preenchendo das colunas da esquerda para a direita, e pula para a proxima linha a cada 3 colunas. Para colocar mais colunas basta mudar o valor 3 nas expressões.

     

    Abraço

    Boreki

     

     

     

    terça-feira, 11 de novembro de 2008 22:48
  • opa..

    cara nao itendi mto bem o que devo fazer..

     

    nao teria como me passar passo a passo, adicionando os campos...?

     

     

    quarta-feira, 12 de novembro de 2008 13:15
  • A primeira coisa que você precisa é na sua query trazer o rownumber sequencial dos registros, você pode fazer isso usando a função ROW_NUMBER to sql server. Então a sua query ficaria +- assim (Sales Territory é uma tabela do Adventureworks):

     

    Code Snippet

    SELECT
       ROW_NUMBEr() OVER (ORDER BY SalesTerritory.Name ASC) as Linha,
       SalesTerritory.Name,
       SalesTerritory.[Group]
    FROM
      SalesTerritory

     

     

    Se você estiver usando outro DB provavelmente tem alguma função equivalente para trazer o numero de linhas.

     

    Para o relatório, crie um relatório em branco.

    Adicione uma matrix.

    No campo 'Data' Adicione o campo Nome (=First(Fields!Name.Value))

    Clique com o botao direito onde está escrito Columns / Edit Group.

    Na expressão do grupo, coloque o seguinte:

    Code Snippet

    =Ceiling(Fields!Linha.Value mod 3)

     

    Clique com o botao direito onde está escrito Row/ Edit Group.

    Na expressão do grupo, coloque o seguinte:

    Code Snippet

    =Ceiling(Fields!Linha.Value / 3)

     

     

    That's it.

    Att

    Boreki

     

    quinta-feira, 13 de novembro de 2008 22:46