none
Criando Relatórios para aplicação web. RRS feed

  • Pergunta

  •   Bom dia pessoal, estou perguntando aqui, pois já procurei em meus livros, páginas pela web.. etc.. e não achei algo que pudesse me ajudar!

      Veja, só: 

      Meu sistema trabalha com multibancos, ou seja 1 banco possui os users em geral, depois cada cliente tem seu banco. conforme seu login e senha eu os direciono para seus respectivos bancos.

      Neste momento preciso começar a criar relatórios, porém não sei ainda como criar relatórios para C# asp.net, não sei nem por onde começar, exatamente não sei por onde começar =\ 

      Vou dizer o que eu fiz: criei um novo item e escolhi a opção report o mesmo criei com o nome "RpPedido.rdlc", agora eu preciso fazer o seguinte:

     O usuário busca o cliente, clica em "buscar", aparecerá no gridview o cliente, quando clicar em relatório, gostaria que abrisse o report com os dados do cliente, e eu não sei como chamar e nem como passar esses parametros. Vi alguns tutoriais que mandam puxar pelo dataset os campos etc, mas não rola pq cada hora será um banco de dados diferente né, devido ao acesso.

     Se puderem ajudar,agradecerei muitoooo.

     Vlw.
    sexta-feira, 3 de agosto de 2012 13:15

Respostas

  • Vou resumir em tópicos e você vai pesquisando e me perguntando.

    1 - DataSet tipado não é a única forma de adicionar dados num ReportView. Você consegue usar uma classe que retorna um método do tipo List<> como fonte de dados através do controle ObjectDataSource desmarcando a caixa 'Only data components'.

    2 - Para usar o ReportView você precisa entender 2 coisas: O ReportView (RDCL) é um arquivo em XML que tem em seu código uma representação de uma fonte de dados do tipo DataSet. O ReportViewer é um controle que renderiza o RDCL e possui uma fonte de dados vinculada.

    3 - O único inconveniente de se usar o ReportView com um ObjectDataSource sem o 'only data components' é que você terá que 'programar' o DataSet no XML do RDCL manualmente, para que ele entenda os dados que estão sendo trazidos da sua classe. Isso acontece porque quando você cria um RDCL, a primeira coisa que ele te pede é pra informar um DataSet tipado. Quando você informa, ele se 'autoprograma' para interpretar aqueles dados, criando em seu código XML uma representação do seu DataSet. Para ver esse código, basta clicar com o botão direito em cima do RDCL e clicar em 'Abrir com'.

    4 - Para criar um ReportView usando um ObjectDataSource  sem o 'only data components' como fonte de dados, você precisa abrir um Relatório sem ser pelo assistente, salvar, sair dele, clicar com o botão direito em cima do RDCL, Abrir Com e criar manualmente seu DataSet - conforme os dados trazidos pela sua List<>. Feche o modo XML do RDCL, abre normalmente no modo de design e após isso, crie uma Table. Então poerá jogar seus dados do DataSet do RDCL para a Table e pronto.

    Segue um exemplo de uma classe de fonte de dados:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace SIM
    {
        public class objURARamoCobranca
        {
            public string telefone { get; set; }
            public string cpf { get; set; }
            public DateTime data { get; set; }        
    
            public objURARamoCobranca(string nr_telefone_cobranca, string nr_cpf_cobrado, DateTime dt_cadastramento)
            {
                this.telefone = nr_telefone_cobranca;
                this.cpf = nr_cpf_cobrado;
                this.data = dt_cadastramento;
            }
    
            public static List<objURARamoCobranca> Filtrar(DateTime dtDe, DateTime dtAte)
            {
                //Formatação da data para ajustar as horas do período de busca
                dtDe  = DateTime.Parse(String.Format("{0:dd/MM/yyyy}", dtDe) + " 00:00:00");
                dtAte = DateTime.Parse(String.Format("{0:dd/MM/yyyy}", dtAte) + " 23:59:59");                                
                
                using (var prd = new dcProdDataContext())
                {                                
                    //Recupera o resultado da consulta
                    var q = from rc in prd.SIM_ramo_cobranca
                            where rc.dt_cadastramento >= dtDe && rc.dt_cadastramento <= dtAte
                            select new { telefone = rc.nr_telefone_cobranca, cpf = rc.nr_cpf_cobrado, data = rc.dt_cadastramento };
    
                    //Adiciona os resultados à lista
                    List<objURARamoCobranca> obj = new List<objURARamoCobranca>();
    
                    foreach (var i in q)
                    {
                        obj.Add(new objURARamoCobranca(i.telefone, i.cpf, i.data));
                    }
    
                    return obj;
                }
            }
        }
    }

    Os dados que o RDCL deverá interpretar no DataSet são as properties. Eles são as 'colunas'. O método que tenho que configurar no ObjectDataSource é o Filtrar(). Preceba que eu passo como parâmetros as datas que eu quero informar. Dentro da filtrar você pode fazer o código que irá escolher qual dado alimentará a lista.

    Segue um exemplo agora do meu ASPX:

    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <table cellpadding="0" cellspacing="0" style="border: 1px solid #000; color: #FFFFFF; font-family: 'Trebuchet MS'; width: 100%; background-image:url('Imagens/fundoFiltro.jpg'); background-repeat:repeat-x; background-color:#333; background-position:top;">
                <tr>
                    <td style="height: 20px; padding: 2px;">
                        Filtros
                    </td>
                </tr>
                <tr>
                    <td style="padding: 2px;">
                        <asp:TextBox ID="txtDe" runat="server"></asp:TextBox>
                        <asp:TextBox ID="txtAte" runat="server"></asp:TextBox>
                        <asp:Button ID="btFiltrar" runat="server" OnClick="btFiltrar_Click" Text="Filtrar" ForeColor="#0066CC" />  
                    </td>
                </tr>
            </table>
            <rsweb:ReportViewer ID="rpvURARamoCobranca" runat="server" Font-Names="Verdana"
                Font-Size="8pt" InteractiveDeviceInfos="(Coleção)" WaitMessageFont-Names="Verdana"
                WaitMessageFont-Size="14pt" Width="100%" Height="">
                <LocalReport ReportPath="rvURARamoCobranca.rdlc">
                    <DataSources>
                        <rsweb:ReportDataSource DataSourceId="ReportDataSource" Name="DefaultDataSet" />
                    </DataSources>
                </LocalReport>
            </rsweb:ReportViewer>
            <asp:ObjectDataSource ID="ReportDataSource" runat="server" SelectMethod="Filtrar"
                TypeName="SIM.objURARamoCobranca">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtDe" Name="dtDe" PropertyName="Text" Type="DateTime" />
                    <asp:ControlParameter ControlID="txtAte" Name="dtAte" PropertyName="Text" Type="DateTime" />
                </SelectParameters>
            </asp:ObjectDataSource>
        </div>
        </form>
    </body>

    Segue um exemplo agora do meu ASPX.CS:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Globalization;
    using Microsoft.Reporting.WebForms;
    
    namespace SIM
    {
        public partial class rvURARamoCobranca : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txtDe.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    txtAte.Text = DateTime.Now.ToString("dd/MM/yyyy");
                }
            }
    
            protected void btFiltrar_Click(object sender, EventArgs e)
            {
    
                DateTime DataDe;
                DateTime DataAte;
    
                try
                {
                    DataDe = DateTime.Parse(txtDe.Text + " 00:00:00");
                    DataAte = DateTime.Parse(txtAte.Text + " 23:59:59");
                }
                catch (Exception)
                {
                    DataDe = DateTime.Now;
                    DataAte = DateTime.Now;
                }
    
                rpvURARamoCobranca.LocalReport.SetParameters(new ReportParameter[] { new ReportParameter("dtDe", String.Format("{0:dd/MM/yyyy}", DataDe)) });
                rpvURARamoCobranca.LocalReport.SetParameters(new ReportParameter[] { new ReportParameter("dtAte", String.Format("{0:dd/MM/yyyy}", DataAte)) });
                rpvURARamoCobranca.LocalReport.Refresh();
            }
        }
    }

    Segue um exemplo do meu RDCL:

    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
      <DataSources>
        <DataSource Name="DefaultDataSource">
          <ConnectionProperties>
            <DataProvider />
            <ConnectString />
          </ConnectionProperties>
          <rd:DataSourceID>5a8ac840-e217-4fc2-b5dc-160a3eb23c11</rd:DataSourceID>
        </DataSource>
      </DataSources>
      <DataSets>
        <DataSet Name="DefaultDataSet">
          <Fields>
            <Field Name="telefone">
              <DataField>telefone</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="cpf">
              <DataField>cpf</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="data">
              <DataField>data</DataField>
              <rd:TypeName>System.DateTime</rd:TypeName>
            </Field>
          </Fields>
          <Query>
            <DataSourceName>DefaultDataSource</DataSourceName>
            <CommandText />
            <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
          </Query>
          <rd:DataSetInfo>
            <rd:TableName>DefaultDataSet</rd:TableName>
            <rd:ObjectDataSourceType>DefaultDataSet, WindowsApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
          </rd:DataSetInfo>
        </DataSet>
      </DataSets>
      <Body>
        <ReportItems>
          <Tablix Name="tblRelatorio">
            <TablixBody>
              <TablixColumns>
                <TablixColumn>
                  <Width>2.60404in</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>1.49318in</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>1.45833in</Width>
                </TablixColumn>
              </TablixColumns>
              <TablixRows>
                <TablixRow>
                  <Height>0.24997in</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblTelefone">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Telefone</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>3</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblCPF">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>CPF</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>2</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblDataEntrada">
                          <CanGrow>true</CanGrow>
                          <UserSort>
                            <SortExpression>=Fields!data.Value</SortExpression>
                            <SortTarget>DefaultDataSet</SortTarget>
                          </UserSort>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Data de entrada</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
                <TablixRow>
                  <Height>0.24997in</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="txtNome">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!telefone.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>1</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="cpf">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!cpf.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>cpf</rd:DefaultName>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="data">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!data.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>data</rd:DefaultName>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
              </TablixRows>
            </TablixBody>
            <TablixColumnHierarchy>
              <TablixMembers>
                <TablixMember />
                <TablixMember />
                <TablixMember />
              </TablixMembers>
            </TablixColumnHierarchy>
            <TablixRowHierarchy>
              <TablixMembers>
                <TablixMember>
                  <FixedData>true</FixedData>
                  <KeepWithGroup>After</KeepWithGroup>
                  <RepeatOnNewPage>true</RepeatOnNewPage>
                  <KeepTogether>true</KeepTogether>
                </TablixMember>
                <TablixMember>
                  <Group Name="tblRelatorio_Details_Group">
                    <DataElementName>Detail</DataElementName>
                  </Group>
                  <TablixMembers>
                    <TablixMember />
                  </TablixMembers>
                  <DataElementName>Detail_Collection</DataElementName>
                  <DataElementOutput>Output</DataElementOutput>
                  <KeepTogether>true</KeepTogether>
                </TablixMember>
              </TablixMembers>
            </TablixRowHierarchy>
            <KeepTogether>true</KeepTogether>
            <DataSetName>DefaultDataSet</DataSetName>
            <Height>0.49994in</Height>
            <Width>14.1111cm</Width>
            <Style />
          </Tablix>
        </ReportItems>
        <Height>35.99568pt</Height>
        <Style />
      </Body>
      <ReportParameters>
        <ReportParameter Name="dtDe">
          <DataType>DateTime</DataType>
          <AllowBlank>true</AllowBlank>
          <Prompt>DataInicial</Prompt>
        </ReportParameter>
        <ReportParameter Name="dtAte">
          <DataType>DateTime</DataType>
          <AllowBlank>true</AllowBlank>
          <Prompt>DataFinal</Prompt>
        </ReportParameter>
      </ReportParameters>
      <Width>399.99991pt</Width>
      <Page>
        <PageHeader>
          <Height>0.75cm</Height>
          <PrintOnFirstPage>true</PrintOnFirstPage>
          <PrintOnLastPage>true</PrintOnLastPage>
          <ReportItems>
            <Textbox Name="txtTitulo">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>Inadimplentes por CPF</Value>
                      <Style>
                        <FontSize>12pt</FontSize>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>3.73062cm</Left>
              <Height>0.70556cm</Height>
              <Width>6.67632cm</Width>
              <Style>
                <BackgroundColor>White</BackgroundColor>
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
            <Textbox Name="txtAte">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>= "Até: " + String.Format("{0:dd/MM/yyyy}", Parameters!dtAte.Value)</Value>
                      <Style>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>10.58333cm</Left>
              <Height>20pt</Height>
              <Width>100pt</Width>
              <ZIndex>1</ZIndex>
              <Style>
                <Border />
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
            <Textbox Name="txtDe">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>= "De: " + String.Format("{0:dd/MM/yyyy}", Parameters!dtDe.Value)</Value>
                      <Style>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>0.02646cm</Left>
              <Height>20pt</Height>
              <Width>100pt</Width>
              <ZIndex>2</ZIndex>
              <Style>
                <Border />
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
          </ReportItems>
          <Style />
        </PageHeader>
        <PageHeight>29.7cm</PageHeight>
        <PageWidth>21cm</PageWidth>
        <LeftMargin>2cm</LeftMargin>
        <RightMargin>2cm</RightMargin>
        <TopMargin>2cm</TopMargin>
        <BottomMargin>2cm</BottomMargin>
        <Style />
      </Page>
      <Language>pt-BR</Language>
      <ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
      <rd:ReportID>0914d6eb-f398-4d3e-841f-7dd634562a64</rd:ReportID>
      <rd:ReportUnitType>Cm</rd:ReportUnitType>
    </Report>

    Basta você interpretar e modificar os códigos para sua necessidade. Vale lembrar que estou usando LINQ para recuperar os dados do banco, mas isso não interfere em nada. Você pode substituir por Querys SQL à vontade na classe da fonte de dados.

    Boa sorte!


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    sexta-feira, 3 de agosto de 2012 14:19

Todas as Respostas

  • Douglas relatórios para web report viewer,crystal Report vc tem que ter um dataset tipado ou seja vc tem que criar um dataset nele vc cria um datatable e nesse datatable vc pode colocar uma consulta ou uma storage procedure, ai qdo vc criar seu relatorio vc vincula ele a esse datatable, por padrão é isso, eu particularmente uso o report viewer pq é nativo e não tem restrições de acesso, o crystal report tem a limitação de que 1 relatório só pode ser visto simultaneamente por 5 usuários a não ser que vc compre a versão do crystal.

    Tenho um sistema onde tb acesso alguns bancos no meu caso(oracle.sql server 2000 e 2008) no meu caso o wizard do dataset nem se conecta ao sql 2000 e o oracle só tenho acesso a views e tb deu problema no dataset, buscando algo na internet achei um tutorial muito interessante onde para alguns relatorios fiz algumas adaptações mais td funcionou, aqui vai o link

    http://ecode10.com/artigo/1129/ReportViewer+sem+DataSet+Tipado+e+gerando+PDF.aspx#comentario

    Única coisa que não fiz foi a parte de gerar pdf nao implementei deixei padrão pois o proprio reportviewer gera o pdf basta clicar na opção.


    Junior

    • Sugerido como Resposta Rafa Santos sexta-feira, 3 de agosto de 2012 13:51
    • Não Sugerido como Resposta Rafa Santos sexta-feira, 3 de agosto de 2012 13:51
    sexta-feira, 3 de agosto de 2012 13:30
  • Oi Jr. obrigado pelo retorno... 

      Desculpe fazer perguntas bestas, mas é que realmente eu não consigo ainda entender o conceito entende? E se eu não consigo entender o conceito, fica ainda mais dificil entender o restante =\

     Ex: No Delphi eu abria um form e puxava o report para dentro deste form, Este era o inicio. no caso do asp.net  não né. No caso eu incluo no meu projeto um report. OK.
     
     Neste momento do meu lado esquerdo eu tenho 3 pastas.. Built in Fields / Parameters / Images.

      Eu não tenho como simplesmente desenhar neste meu report, e passar por parametros meus dados? 

      Existe como eu fazer isso que eu quero? Como cada usuário acessa seu banco de dados, é possível eu fazer isso?

    sexta-feira, 3 de agosto de 2012 13:45
  • Douglas o grande paradigma qdo migramos de windows forms para web forms é perceber que web forms sempre trabalhamos descontectados do banco, portanto muitas facilidades que temos nos windows forms não podemos ter isso via web.

    No report viewer a necessidade do dataset é simplesmente para vc poder arrastar os campos para a tablix, se no seu caso os campos são os mesmos mudando apenas banco(eu nunca testei) vc pode escolher um banco criar o dataset arrastar os campos para o tablix no report e no evento do seu botão vc fazer o devido tratamento para o usuário e qual banco e fazer o bind do relatorio, nunca testei mais acho que se os campos nas tabelas forem as mesmas acho que dá certo.

    Vá aqui no forum específico para relatorios lá tem uns tutoriais do Laércio  muito bom ele tem exemplos tanto do report viewer qto do crystal

    http://social.msdn.microsoft.com/Forums/pt-br/vsreportingpt/threads


    Junior

    • Marcado como Resposta Douglas Bertelli sexta-feira, 3 de agosto de 2012 16:43
    • Não Marcado como Resposta Douglas Bertelli sexta-feira, 3 de agosto de 2012 21:50
    sexta-feira, 3 de agosto de 2012 14:13
  • Vou resumir em tópicos e você vai pesquisando e me perguntando.

    1 - DataSet tipado não é a única forma de adicionar dados num ReportView. Você consegue usar uma classe que retorna um método do tipo List<> como fonte de dados através do controle ObjectDataSource desmarcando a caixa 'Only data components'.

    2 - Para usar o ReportView você precisa entender 2 coisas: O ReportView (RDCL) é um arquivo em XML que tem em seu código uma representação de uma fonte de dados do tipo DataSet. O ReportViewer é um controle que renderiza o RDCL e possui uma fonte de dados vinculada.

    3 - O único inconveniente de se usar o ReportView com um ObjectDataSource sem o 'only data components' é que você terá que 'programar' o DataSet no XML do RDCL manualmente, para que ele entenda os dados que estão sendo trazidos da sua classe. Isso acontece porque quando você cria um RDCL, a primeira coisa que ele te pede é pra informar um DataSet tipado. Quando você informa, ele se 'autoprograma' para interpretar aqueles dados, criando em seu código XML uma representação do seu DataSet. Para ver esse código, basta clicar com o botão direito em cima do RDCL e clicar em 'Abrir com'.

    4 - Para criar um ReportView usando um ObjectDataSource  sem o 'only data components' como fonte de dados, você precisa abrir um Relatório sem ser pelo assistente, salvar, sair dele, clicar com o botão direito em cima do RDCL, Abrir Com e criar manualmente seu DataSet - conforme os dados trazidos pela sua List<>. Feche o modo XML do RDCL, abre normalmente no modo de design e após isso, crie uma Table. Então poerá jogar seus dados do DataSet do RDCL para a Table e pronto.

    Segue um exemplo de uma classe de fonte de dados:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace SIM
    {
        public class objURARamoCobranca
        {
            public string telefone { get; set; }
            public string cpf { get; set; }
            public DateTime data { get; set; }        
    
            public objURARamoCobranca(string nr_telefone_cobranca, string nr_cpf_cobrado, DateTime dt_cadastramento)
            {
                this.telefone = nr_telefone_cobranca;
                this.cpf = nr_cpf_cobrado;
                this.data = dt_cadastramento;
            }
    
            public static List<objURARamoCobranca> Filtrar(DateTime dtDe, DateTime dtAte)
            {
                //Formatação da data para ajustar as horas do período de busca
                dtDe  = DateTime.Parse(String.Format("{0:dd/MM/yyyy}", dtDe) + " 00:00:00");
                dtAte = DateTime.Parse(String.Format("{0:dd/MM/yyyy}", dtAte) + " 23:59:59");                                
                
                using (var prd = new dcProdDataContext())
                {                                
                    //Recupera o resultado da consulta
                    var q = from rc in prd.SIM_ramo_cobranca
                            where rc.dt_cadastramento >= dtDe && rc.dt_cadastramento <= dtAte
                            select new { telefone = rc.nr_telefone_cobranca, cpf = rc.nr_cpf_cobrado, data = rc.dt_cadastramento };
    
                    //Adiciona os resultados à lista
                    List<objURARamoCobranca> obj = new List<objURARamoCobranca>();
    
                    foreach (var i in q)
                    {
                        obj.Add(new objURARamoCobranca(i.telefone, i.cpf, i.data));
                    }
    
                    return obj;
                }
            }
        }
    }

    Os dados que o RDCL deverá interpretar no DataSet são as properties. Eles são as 'colunas'. O método que tenho que configurar no ObjectDataSource é o Filtrar(). Preceba que eu passo como parâmetros as datas que eu quero informar. Dentro da filtrar você pode fazer o código que irá escolher qual dado alimentará a lista.

    Segue um exemplo agora do meu ASPX:

    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <table cellpadding="0" cellspacing="0" style="border: 1px solid #000; color: #FFFFFF; font-family: 'Trebuchet MS'; width: 100%; background-image:url('Imagens/fundoFiltro.jpg'); background-repeat:repeat-x; background-color:#333; background-position:top;">
                <tr>
                    <td style="height: 20px; padding: 2px;">
                        Filtros
                    </td>
                </tr>
                <tr>
                    <td style="padding: 2px;">
                        <asp:TextBox ID="txtDe" runat="server"></asp:TextBox>
                        <asp:TextBox ID="txtAte" runat="server"></asp:TextBox>
                        <asp:Button ID="btFiltrar" runat="server" OnClick="btFiltrar_Click" Text="Filtrar" ForeColor="#0066CC" />  
                    </td>
                </tr>
            </table>
            <rsweb:ReportViewer ID="rpvURARamoCobranca" runat="server" Font-Names="Verdana"
                Font-Size="8pt" InteractiveDeviceInfos="(Coleção)" WaitMessageFont-Names="Verdana"
                WaitMessageFont-Size="14pt" Width="100%" Height="">
                <LocalReport ReportPath="rvURARamoCobranca.rdlc">
                    <DataSources>
                        <rsweb:ReportDataSource DataSourceId="ReportDataSource" Name="DefaultDataSet" />
                    </DataSources>
                </LocalReport>
            </rsweb:ReportViewer>
            <asp:ObjectDataSource ID="ReportDataSource" runat="server" SelectMethod="Filtrar"
                TypeName="SIM.objURARamoCobranca">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtDe" Name="dtDe" PropertyName="Text" Type="DateTime" />
                    <asp:ControlParameter ControlID="txtAte" Name="dtAte" PropertyName="Text" Type="DateTime" />
                </SelectParameters>
            </asp:ObjectDataSource>
        </div>
        </form>
    </body>

    Segue um exemplo agora do meu ASPX.CS:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Globalization;
    using Microsoft.Reporting.WebForms;
    
    namespace SIM
    {
        public partial class rvURARamoCobranca : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txtDe.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    txtAte.Text = DateTime.Now.ToString("dd/MM/yyyy");
                }
            }
    
            protected void btFiltrar_Click(object sender, EventArgs e)
            {
    
                DateTime DataDe;
                DateTime DataAte;
    
                try
                {
                    DataDe = DateTime.Parse(txtDe.Text + " 00:00:00");
                    DataAte = DateTime.Parse(txtAte.Text + " 23:59:59");
                }
                catch (Exception)
                {
                    DataDe = DateTime.Now;
                    DataAte = DateTime.Now;
                }
    
                rpvURARamoCobranca.LocalReport.SetParameters(new ReportParameter[] { new ReportParameter("dtDe", String.Format("{0:dd/MM/yyyy}", DataDe)) });
                rpvURARamoCobranca.LocalReport.SetParameters(new ReportParameter[] { new ReportParameter("dtAte", String.Format("{0:dd/MM/yyyy}", DataAte)) });
                rpvURARamoCobranca.LocalReport.Refresh();
            }
        }
    }

    Segue um exemplo do meu RDCL:

    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
      <DataSources>
        <DataSource Name="DefaultDataSource">
          <ConnectionProperties>
            <DataProvider />
            <ConnectString />
          </ConnectionProperties>
          <rd:DataSourceID>5a8ac840-e217-4fc2-b5dc-160a3eb23c11</rd:DataSourceID>
        </DataSource>
      </DataSources>
      <DataSets>
        <DataSet Name="DefaultDataSet">
          <Fields>
            <Field Name="telefone">
              <DataField>telefone</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="cpf">
              <DataField>cpf</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="data">
              <DataField>data</DataField>
              <rd:TypeName>System.DateTime</rd:TypeName>
            </Field>
          </Fields>
          <Query>
            <DataSourceName>DefaultDataSource</DataSourceName>
            <CommandText />
            <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
          </Query>
          <rd:DataSetInfo>
            <rd:TableName>DefaultDataSet</rd:TableName>
            <rd:ObjectDataSourceType>DefaultDataSet, WindowsApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
          </rd:DataSetInfo>
        </DataSet>
      </DataSets>
      <Body>
        <ReportItems>
          <Tablix Name="tblRelatorio">
            <TablixBody>
              <TablixColumns>
                <TablixColumn>
                  <Width>2.60404in</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>1.49318in</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>1.45833in</Width>
                </TablixColumn>
              </TablixColumns>
              <TablixRows>
                <TablixRow>
                  <Height>0.24997in</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblTelefone">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Telefone</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>3</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblCPF">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>CPF</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>2</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="lblDataEntrada">
                          <CanGrow>true</CanGrow>
                          <UserSort>
                            <SortExpression>=Fields!data.Value</SortExpression>
                            <SortTarget>DefaultDataSet</SortTarget>
                          </UserSort>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Data de entrada</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                    <Color>White</Color>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <BackgroundColor>#555555</BackgroundColor>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
                <TablixRow>
                  <Height>0.24997in</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="txtNome">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!telefone.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <ZIndex>1</ZIndex>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="cpf">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!cpf.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>cpf</rd:DefaultName>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="data">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!data.Value</Value>
                                  <Style>
                                    <FontSize>8pt</FontSize>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>data</rd:DefaultName>
                          <Style>
                            <Border>
                              <Style>Solid</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
              </TablixRows>
            </TablixBody>
            <TablixColumnHierarchy>
              <TablixMembers>
                <TablixMember />
                <TablixMember />
                <TablixMember />
              </TablixMembers>
            </TablixColumnHierarchy>
            <TablixRowHierarchy>
              <TablixMembers>
                <TablixMember>
                  <FixedData>true</FixedData>
                  <KeepWithGroup>After</KeepWithGroup>
                  <RepeatOnNewPage>true</RepeatOnNewPage>
                  <KeepTogether>true</KeepTogether>
                </TablixMember>
                <TablixMember>
                  <Group Name="tblRelatorio_Details_Group">
                    <DataElementName>Detail</DataElementName>
                  </Group>
                  <TablixMembers>
                    <TablixMember />
                  </TablixMembers>
                  <DataElementName>Detail_Collection</DataElementName>
                  <DataElementOutput>Output</DataElementOutput>
                  <KeepTogether>true</KeepTogether>
                </TablixMember>
              </TablixMembers>
            </TablixRowHierarchy>
            <KeepTogether>true</KeepTogether>
            <DataSetName>DefaultDataSet</DataSetName>
            <Height>0.49994in</Height>
            <Width>14.1111cm</Width>
            <Style />
          </Tablix>
        </ReportItems>
        <Height>35.99568pt</Height>
        <Style />
      </Body>
      <ReportParameters>
        <ReportParameter Name="dtDe">
          <DataType>DateTime</DataType>
          <AllowBlank>true</AllowBlank>
          <Prompt>DataInicial</Prompt>
        </ReportParameter>
        <ReportParameter Name="dtAte">
          <DataType>DateTime</DataType>
          <AllowBlank>true</AllowBlank>
          <Prompt>DataFinal</Prompt>
        </ReportParameter>
      </ReportParameters>
      <Width>399.99991pt</Width>
      <Page>
        <PageHeader>
          <Height>0.75cm</Height>
          <PrintOnFirstPage>true</PrintOnFirstPage>
          <PrintOnLastPage>true</PrintOnLastPage>
          <ReportItems>
            <Textbox Name="txtTitulo">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>Inadimplentes por CPF</Value>
                      <Style>
                        <FontSize>12pt</FontSize>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>3.73062cm</Left>
              <Height>0.70556cm</Height>
              <Width>6.67632cm</Width>
              <Style>
                <BackgroundColor>White</BackgroundColor>
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
            <Textbox Name="txtAte">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>= "Até: " + String.Format("{0:dd/MM/yyyy}", Parameters!dtAte.Value)</Value>
                      <Style>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>10.58333cm</Left>
              <Height>20pt</Height>
              <Width>100pt</Width>
              <ZIndex>1</ZIndex>
              <Style>
                <Border />
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
            <Textbox Name="txtDe">
              <CanGrow>true</CanGrow>
              <KeepTogether>true</KeepTogether>
              <Paragraphs>
                <Paragraph>
                  <TextRuns>
                    <TextRun>
                      <Value>= "De: " + String.Format("{0:dd/MM/yyyy}", Parameters!dtDe.Value)</Value>
                      <Style>
                        <FontWeight>Bold</FontWeight>
                      </Style>
                    </TextRun>
                  </TextRuns>
                  <Style>
                    <TextAlign>Center</TextAlign>
                  </Style>
                </Paragraph>
              </Paragraphs>
              <Left>0.02646cm</Left>
              <Height>20pt</Height>
              <Width>100pt</Width>
              <ZIndex>2</ZIndex>
              <Style>
                <Border />
                <PaddingLeft>2pt</PaddingLeft>
                <PaddingRight>2pt</PaddingRight>
                <PaddingTop>2pt</PaddingTop>
                <PaddingBottom>2pt</PaddingBottom>
              </Style>
            </Textbox>
          </ReportItems>
          <Style />
        </PageHeader>
        <PageHeight>29.7cm</PageHeight>
        <PageWidth>21cm</PageWidth>
        <LeftMargin>2cm</LeftMargin>
        <RightMargin>2cm</RightMargin>
        <TopMargin>2cm</TopMargin>
        <BottomMargin>2cm</BottomMargin>
        <Style />
      </Page>
      <Language>pt-BR</Language>
      <ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
      <rd:ReportID>0914d6eb-f398-4d3e-841f-7dd634562a64</rd:ReportID>
      <rd:ReportUnitType>Cm</rd:ReportUnitType>
    </Report>

    Basta você interpretar e modificar os códigos para sua necessidade. Vale lembrar que estou usando LINQ para recuperar os dados do banco, mas isso não interfere em nada. Você pode substituir por Querys SQL à vontade na classe da fonte de dados.

    Boa sorte!


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    sexta-feira, 3 de agosto de 2012 14:19
  • Ola, bom dia.

    Vou tentar contruibuir tambem. Eu utilizo o CrystalReports, então tenho um Formulario com a interface do Relatorio (Filtros,etc) ... Uma pagina responsavel por montar o relatorio em si, que possui os objetos de Viewer e etc .. Um DataSet, mapeado com os campos que preciso utilizar no Report e um arquivo .rpt que é o relatorio em si.

    Veja esse artigo simples do Marcoratti:
    http://www.macoratti.net/10/08/vs_crpt1.htm


    Altieri Pereira http://altieripereira.blogspot.com/

    sexta-feira, 3 de agosto de 2012 14:35