none
Duvida - Geração de Relatório utilizando .NET RRS feed

  • Discussão Geral

  • Bom dia, amigos.

     Estou fazendo TCC, faço análise de sistemas, bacharelado.

     Como sou novo na linguagem c# resolvi fazer o sistema nessa linguagem. Fiquei com duvidas no processo de criação de um relatório, vi que existem frameworks que auxiliam nessa criação, como o dataTable (http://www.datatables.net/release-datatables/extensions/TableTools/examples/pdf_message.html#), entretanto não sei como formar uma estrutura para criação, o framework já esta instalado no meu sistema, o que deverei fazer agora?

    Utilizo o Visual Studio Community 2013.

    quarta-feira, 6 de maio de 2015 11:47

Todas as Respostas

  • Tiago,

    Uma alternativa é utilizar o Report Viewer. Tente dar uma olhada nos tutoriais que o Macoratti montou a respeito:

    http://www.macoratti.net/pageview.aspx?catid=9

    quarta-feira, 6 de maio de 2015 12:05
  • Tiago, seu sistema é web? Caso seja positivo, é webforms ou mvc?

    Conheço 3 componentes pra gerar relatório: ReportViewer, Crystal Report e o ITextSharp.

    Particularmente, eu gosto de utilizar o reportviewer.

    quarta-feira, 6 de maio de 2015 12:09
  • É Web sim, MVC 5!!! 

    Então para utilizarmos o reportviewer, o que precisamos fazer? Instalo ele pelo NuGet?

    quarta-feira, 6 de maio de 2015 12:33
  • Tiago, segue um link explicando como utilizar o reportviewer. Apesar do artigo trabalhar com a versão 2010 do VS, não tem muita diferença pro 2013.

    http://www.linhadecodigo.com.br/artigo/3665/gerando-relatorios-com-reportviewer-em-aspnet.aspx

    Uma observação: Mesmo que você esteja trabalhando com MVC, o reportviewer precisa de uma página webform para rodar. Então, você vai ter que criar essa página aspx dentro do seu projeto.

    quarta-feira, 6 de maio de 2015 12:37
  • Utilizo para Web, MVC 5, em pesquisas, observei que o Report Viewer já vem até instalado no Community, entretanto a manipulação dele parece ser local, vou verificar se encontro um passo a passo. Valeu
    quarta-feira, 6 de maio de 2015 12:40
  • Beleza, vou seguir esse passo a passo, valeu amigo!!!
    quarta-feira, 6 de maio de 2015 12:45
  • Bom dia!

    Recomendo utilizar o ReportViewer também!

    Tem dois vídeos muito bons para te ajudar:

    Criando relatórios com o Report no Visual Studio utilizando C#:

    https://www.youtube.com/watch?v=aNVVpW4ouGo

    E esse, parametrizado:

    Criando relatórios com parâmetros utilizando Report no Visual Studio

    https://www.youtube.com/watch?v=n8xf-LelNdQ

    Abraço!

    quarta-feira, 6 de maio de 2015 14:45
  • Parceiro, vi os videos e tal, mas o meu projeto é Web!!! Ai não me ajudou muito! Mas mesmo assim, valeu!
    quinta-feira, 7 de maio de 2015 12:22
  • Alexandre, me ajudou muito esse tutorial, entretanto mesmo após criado o relatorio pelo report, e criado o Web Form, inserindo as propriedade do relatório, não consegui executar, nesse passo a passo, informa que seria só executar para testar, mas quando faço isso ele apresenta erro!
    quinta-feira, 7 de maio de 2015 12:25
  • Qual o erro?
    quinta-feira, 7 de maio de 2015 12:38
  • Alexandre, não criei a MasterPage, já que criei view home.cshtml com o _layout.cshtml, e telas em geral, o meu projeto esta faltando apenas os relatórios mesmo, então no _layout.cshtml, "setei" o relatório, ficou assim:

     <ul class="nav navbar-nav navbar-right">
                        <li class="dropdown">
                            <a href="Home" class="dropdown-toggle" data-toggle="dropdown">Relatórios<span class="caret"></span></a>
                            <ul class="dropdown-menu" role="menubar"> 
                                <li class="dropdown">
                                    <a href="Home" class="dropdown-toggle" data-toggle="dropdown">Fornecedor<span class="caret"></span></a>
                                    <ul class="dropdown-menu" role="menubar">

    <li>@Html.ActionLink("Fornecedor", "RelatorioFornecedor", "Fornecedor")</li></ul>

                               
                         </li>
                    </ul>
                                                    
                </div>

    quinta-feira, 7 de maio de 2015 14:09
  • Você precisa criar uma paginas webform. Com a extensão aspx. E nela colocar o componente do reportviewer.
    quinta-feira, 7 de maio de 2015 16:04
  • Já fiz isso!

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RelatorioFornecedor.aspx.cs" Inherits="SGBLE.Views.Fornecedor.RelatorioFornecedor" %>

    <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="856px">
                <LocalReport ReportPath="Views\Fornecedor\RelatorioFornecedor.rdlc">
                </LocalReport>
            </rsweb:ReportViewer>
        </div>
        </form>
    </body>
    </html>

    quinta-feira, 7 de maio de 2015 16:13
  • Dentro desse form, você precisa colocar o scriptmanager. O reportviewer só funciona com ele.
    quinta-feira, 7 de maio de 2015 16:15
  • Ok, inclui ele:

     

    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                <div>
                    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="856px">
                        <LocalReport ReportPath="Views\Fornecedor\RelatorioFornecedor.rdlc">
                        </LocalReport>
                    </rsweb:ReportViewer>
                </div>
        </form>

     O que devo fazer agora?

    quinta-feira, 7 de maio de 2015 16:47
  • Como está o seu codebehind? Onde você está chamando o evento pra carregar o relatório e qual o erro que dá quando ele é carregado?
    quinta-feira, 7 de maio de 2015 16:53
  • Alexandre, estou chamando pela view dentro da pasta Shared, no  _layout.cshtml, utilizo o @Html.ActionLink para buscar a classe RelatorioFornecedor. O erro apresentado é 

    Erro de Servidor no Aplicativo '/'.

    Não é possível encontrar o recurso.

    Descrição: HTTP 404. O recurso que você está procurando (ou uma de suas dependências) não pôde ser removido, seu nome foi alterado ou está temporariamente indisponível. Examine o URL e certifique-se de que está digitado corretamente. 

    URL solicitada: /Fornecedor/RelatorioFornecedor


    quinta-feira, 7 de maio de 2015 17:02
  • Diferentemente do mvc, o webform não é chamado pelo controller. Você precisa chamar o aspx direto.

    <a href="@Url.Content("~/Fornecedor/RelatorioFornecedor.aspx")">Relatório</a>

    quinta-feira, 7 de maio de 2015 17:10
  • Entendi, mas continuou com erro:

    Estou achando que o aspx, olhe como ficou:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RelatorioFornecedor.aspx.cs" Inherits="SGBLE.Views.Fornecedor.RelatorioFornecedor" %>
    
    <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                <div>
                    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="856px">
                        <LocalReport ReportPath="Views\Fornecedor\RelatorioFornecedor.rdlc">
                        </LocalReport>
                    </rsweb:ReportViewer>
                </div>
        </form>
    </body>
    </html>
    

    quinta-feira, 7 de maio de 2015 17:17
  • Tiago, agora que entendi o erro. Segundo pesquisei aqui na net, os webforms não podem estar dentro da pasta Views.
    Você precisa criar outra pasta na raíz do projeto para colocar o webform.

    quinta-feira, 7 de maio de 2015 17:27
  • É isso mesmo Alexandre, agora pelo menos mudou a mensagem!!! kkkkk... 

    • Não foi fornecida nenhuma instância de origem de dados para a origem de dados 'DataSetFornecedor'.

    Eu criei esse DataSetFornecedor exclusivamente para esse fornecedor.

     

    quinta-feira, 7 de maio de 2015 18:04
  • Ok, agora você precisa carregar esse dataset no reportviewer do aspx.
    <LocalReport ReportPath="">
    <DataSources>
    <rsweb:ReportDataSource DataSourceId="SEU_OBJECTDATASOURCE" Name="DataSetFornecedor" />
    </DataSources>
    </LocalReport>
    Olha no link que te mandei acima, para ver como usa o wizard pra criar o object data source.
    quinta-feira, 7 de maio de 2015 18:09
  • Alexandre, insiro esse comando dentro do form do aspx né? 

     Já segui todo o seu link, ele está da mesma forma que o meu esta, tirando a MasterPage!

    quinta-feira, 7 de maio de 2015 18:34
  • Isso, esse trecho que botei, ele fica é um complemento do que você já botou lá. Se você ver no aspx (modo design), você vai poder criar o data source clicando numa setinha que tem la no componente.
    quinta-feira, 7 de maio de 2015 18:38
  • quinta-feira, 7 de maio de 2015 18:45
  • Então achei o local, criei o objeto, mas... 

    • A DataSourceID da ReportDataSource 'DataSetFornecedor' do ReportViewer 'ReportViewer1' deve ser a identificação de um controle do tipo IDataSource. Não foi possível localizar um controle com identificação 'relatorio_fornecedor'.

    Obs.: No design é apresentado essa msg também: <rsweb:reportdatasource datasourceid="fornecedor" name="DataSetFornecedor"></rsweb:reportdatasource>Error Creating Control - rsweb:reportdatasource, No 'runat=server' attribute present on the reportdatasource tag.

    quinta-feira, 7 de maio de 2015 18:52
    • A DataSourceID da ReportDataSource 'DataSetFornecedor' do ReportViewer 'ReportViewer1' deve ser a identificação de um controle do tipo IDataSource. Não foi possível localizar um controle com identificação 'fornecedor'.

    Já fiz todos os passos, e o erro continuou, dessa forma já esta:

    quinta-feira, 7 de maio de 2015 19:11
  • Posta teu codigo aspx do reportviewer aqui.

    quinta-feira, 7 de maio de 2015 19:23
  • <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RelatorioFornecedor.aspx.cs" Inherits="SGBLE.Views.Fornecedor.RelatorioFornecedor" %>
    
    <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
           <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                <div>
                    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="856px">
                        <LocalReport ReportPath="Views\Fornecedor\RelatorioFornecedor.rdlc">
                            <DataSources>
                                <rsweb:ReportDataSource DataSourceId="fornecedor" Name="DataSetFornecedor" />
                            </DataSources>
                        </LocalReport>
                    </rsweb:ReportViewer>
                 </div>
       </form>
    </body>
    </html>
    

    quinta-feira, 7 de maio de 2015 19:27
  • Você não criou o ObjectDataSource. Você deveria ter um objeto parecido a esse aqui:

    <asp:ObjectDataSource ID="fornecedor" runat="server" SelectMethod="GetData" TypeName="Help.Web.BDTesteDataSetTableAdapters.VW_ALUNOTableAdapter"></asp:ObjectDataSource>

    No ReportViewer Tasks, você clica em ChooseDataSource e depois clica em OK. Ele deverá criar esse ObjectDataSource pra você.

    quinta-feira, 7 de maio de 2015 19:31
  • Funcionou Alexandre, era o objectDataSource que não estava criado!!! Agora você sabe como deixar o relatorio de acordo com o tamanho da tela?

    Agradeço muito a sua ajuda!

    quinta-feira, 7 de maio de 2015 19:54
  • Cara, fiz assim:

    No head eu coloquei:
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    E no componente eu coloquei:
    Width="100%" Height="100%"

    quinta-feira, 7 de maio de 2015 19:57
  • Bom dia Alexandre, beleza cara, mas no componente esta em px, até ja ajustei la, agora essa porcentagem ela se adapta de acordo com o monitor? Caso a resposta seja positiva, aonde que altero? 
    sexta-feira, 8 de maio de 2015 12:21
  • Se adapta sim. Coloca isso no componente do reportviewer do aspx.
    sexta-feira, 8 de maio de 2015 12:39
  • Ao selecionar em layout é apresentado apenas a barra de ferramentas! Quando seleciono todo o código, não é apresentado a opção de layout. Irei deixar apenas o Width com 100%, quando coloco o Height, o relatório não aparece, ficando assim apresentando apenas a barra de ferramentas:

    Outro duvida é, como coloco para gravar direto em modo paisagem? Já que os meus relatórios, estão ficando muito grandes, e em modo retrato ele acaba pulando de linha. 

    • Editado tiagocostasjf sexta-feira, 8 de maio de 2015 14:08 Incluir mais informações
    sexta-feira, 8 de maio de 2015 13:14
  • Como coloco para gravar direto em modo paisagem?

    Os meus relatórios, estão ficando muito grandes, e em modo retrato ele acaba pulando de linha. 

    sexta-feira, 8 de maio de 2015 16:42
  • Como coloco para gravar direto em modo paisagem?

    Os meus relatórios, estão ficando muito grandes, e em modo retrato ele acaba pulando de linha. 

    Alguem me explica como faço para para o relatório exportar direto em modo paisagem?
    domingo, 10 de maio de 2015 15:44
  • Tem na propriedade do relatório essa opção. No design do rdlc, você clica com o botão direito do mouse, propriedades e lá vai aparecer o as opções retrato e paisagem.
    segunda-feira, 11 de maio de 2015 11:29
  • Bom dia Tiago,

    Você utiliza banco de dados? Caso sim, eu recomendo você utilizar o Reporting Services, é um serviço de gerenciamento de relatórios a partir do banco de dados. Eles são publicados via arquivo RDL e a partir dos dados, você consegue montar alguns tipos de gráficos e chamá-los na sua aplicação .net. 

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    segunda-feira, 11 de maio de 2015 14:08
  • Alexandre, não achei essa opção

    segunda-feira, 11 de maio de 2015 19:01
  • Show Bruno, vou olha sim, valeu!
    segunda-feira, 11 de maio de 2015 19:02
  • Observa que cliquei com o botão direito do mouse fora do body do relatório.


    segunda-feira, 11 de maio de 2015 21:14
  • Beleza, funcionou Alexandre, muito obrigado pela sua ajuda! Aproveitando, como filtro informações antes de gerar um relatório: ex. Data inicial e data final de notas?
    segunda-feira, 11 de maio de 2015 23:33
  • Dá uma olhada nesses artigos:

    https://msdn.microsoft.com/en-us/library/57hkzhy5%28v=vs.140%29.aspx?f=255&MSPPError=-2147217396

    http://www.ezzylearning.com/tutorial/using-parameters-with-objectdatasource-control

    terça-feira, 12 de maio de 2015 01:41