André Alves de Lima

Talking about Software Development and more…

Utilizando o Report Viewer no ASP.NET MVC

Para quem não sabe, a minha expertise é o desenvolvimento de aplicações desktop utilizando a plataforma da Microsoft. Isso quer dizer que toda a minha carreira até agora foi focada em desenvolvimento desktop. E isso quer dizer também que eu sou uma verdadeira porta no que se diz respeito a desenvolvimento web.

Porém, como um dos temas mais requisitados na minha pesquisa de conteúdo do ano passado foi desenvolvimento web, vou tentar abordar uma coisa ou outra utilizando a plataforma de desenvolvimento web da Microsoft, na medida do possível. Outro tema que foi altamente requisitado diz respeito à geração de relatórios. Dessa forma, vou juntar esses dois temas neste artigo, respondendo a uma pergunta que já me fizeram mais de uma vez: como utilizar o Report Viewer no ASP.NET MVC?

Edit: em abril de 2017 eu gravei um vídeo demonstrando como utilizar o Report Viewer no ASP.NET MVC. Se você preferir acompanhar a versão em vídeo deste artigo, aqui vai:

Amigo(a) desenvolvedor(a) web: tenho que te dar os meus parabéns. Como eu mencionei na introdução, a minha experiência com desenvolvimento web é praticamente nula. Dessa forma, para escrever esse artigo eu precisei de uma certa quantidade de pesquisa, tentativa e erro. Algo que eu notei em praticamente todas as minhas fontes de pesquisa é que elas são incompletas e, o pior, consideram que a pessoa que está lendo o artigo é um expert no assunto.

Enfim, depois de lutar um bocado, consegui encontrar duas maneiras de exibir relatórios do Report Viewer no ASP.NET MVC.

Na primeira delas nós jogamos um pouco “fora das regras” e simplesmente criamos um web form no nosso projeto MVC, o que faz com que o projeto se torne um híbrido de MVC e web forms.

Já na segunda alternativa, ficamos “100% no MVC” utilizando a biblioteca Report Viewer for MVC (entre aspas porque no final das contas a biblioteca utiliza web forms por trás dos panos).

Preparando o relatório a ser exibido

Antes de mostrar as duas alternativas, vamos criar o relatório que exibiremos no nosso projeto do ASP.NET MVC. Como o foco deste artigo não é o relatório em si, mas sim, como exibi-lo, vamos criar um relatório extremamente simples só para termos uma ideia de como prosseguir.

Primeiramente, vamos criar um novo projeto do tipo “ASP.NET Web Application” escolhendo o template do MVC:

Uma vez que o Visual Studio tenha criado o projeto, vamos adicionar um DataSet tipado que servirá como fonte de dados do nosso relatório. Adicione o DataSet na pasta “Models” utilizando o nome “PessoaDataSet“:

Dentro do DataSet, adicione uma DataTable chamada “Pessoa” com os campos Id (inteiro, auto incremento, chave primária), Nome e Sobrenome (strings):

Feito isso, crie agora uma pasta chamada “Reports” dentro do projeto e adicione um novo item do tipo “Report“, dando o nome de “RelatorioListaPessoas“:

Dentro do relatório, adicione uma tabela e configure o seu DataSet da seguinte maneira:

Adicione os campos do DataSet na tabela e formate o relatório como você bem desejar, lembrando que o foco deste artigo não é a construção do relatório, mas sim, a sua exibição em um projeto do tipo ASP.NET MVC. Veja só como ficou o meu relatório após a formatação:

Opção 1 – Adicionando um web form com o controle do Report Viewer

Agora que já temos um relatório prontinho para ser exibido, vamos conferir a primeira maneira que podemos utilizar para exibi-lo em um projeto ASP.NET MVC, que é criando um web form.

Primeiramente, temos que adicionar a referência ao controle do Report Viewer. Para isso, vá até a tela de adição de referências e marque a opção “Microsoft.ReportViewer.WebForms“, dentro da categoria Assemblies / Extensions:

Agora clique na nova referência que foi adicionada, vá até a janela de propriedades e altere o tipo de “Copy Local” para “true“:

Feito isso, adicione um web form no projeto, dando o nome de “RelatorioListaPessoas“:

Com o novo web form aberto, vá até a caixa de ferramentas, encontre o item correspondente ao Report Viewer e arraste-o para dentro da “div“:

[imagem]

Para o nosso código não ficar uma bagunça, altere o ID do Report Viewer para “ReportViewer” (ao invés do default que é “ReportViewer1“):

<rsweb:ReportViewer ID="ReportViewer" runat="server"></rsweb:ReportViewer>

Com isso, vamos até o code-behind da nossa página para adicionarmos o código de carregamento do relatório no evento Page_Load:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                var pessoaDataSet = new Models.PessoaDataSet();
                pessoaDataSet.Pessoa.AddPessoaRow("André", "Lima");
                pessoaDataSet.Pessoa.AddPessoaRow("Larissa", "Lima");
                pessoaDataSet.Pessoa.AddPessoaRow("Sophie", "Lima");

                ReportViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
                ReportViewer.LocalReport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\RelatorioListaPessoas.rdlc";
                ReportViewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("PessoaDataSet", (System.Data.DataTable)pessoaDataSet.Pessoa));

                ReportViewer.LocalReport.Refresh();
            }
        }

Perceba que o código é muito simples. Primeiramente criamos uma instância do nosso DataSet e depois configuramos algumas propriedades no nosso controle do Report Viewer. Nada muito sofisticado, não é mesmo? Vamos ver se funciona?

Compile o projeto e escolha a opção de ver essa página no browser:

E, no meu caso, não funcionou:

The base class includes the field ‘ReportViewer’, but its type (Microsoft.Reporting.WebForms.ReportViewer) is not compatible with the type of control (Microsoft.Reporting.WebForms.ReportViewer).

Você sabe por que tivemos esse problema? Porque a referência que adicionamos aponta para a versão 10 do Report Viewer e o controle adicionado pela caixa de ferramentas aponta para a versão 11 do Report Viewer. Para consertarmos esse problema, temos que remover a referência anterior para então adicionarmos a referência correta (apontando para a versão 11 do Report Viewer – ah, e não esqueça de configurar “Copy Local” = “true” mais uma vez!). A dll da versão 11 está disponível no GAC (C:\Windows\assembly\GAC_MSIL):

Ao tentarmos abrir a página normalmente, receberemos outro erro (como o mundo do desenvolvimento web é cheio de artimanhas, não?):

The Report Viewer Web Control requires a System.Web.UI.ScriptManager on the web form.

Esse erro é fácil de consertar. Como a própria mensagem de erro diz, temos que adicionar um ScriptManager no web form. Basta encontra-lo na caixa de ferramentas (dentro da seção “AJAX Extensions“) e arrasta-lo para dentro da “div“, uma linha acima do Report Viewer:

    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <rsweb:ReportViewer ID="ReportViewer" runat="server"></rsweb:ReportViewer>
    </div>

Será que depois disso o relatório será exibido sem nenhum erro? É claro que não! Temos que consertar mais um erro, veja só:

The Report Viewer Web Control HTTP Handler has not been registered in the application’s web.config file.

Para consertar esse último erro, temos que ir até o web.config para adicionarmos algumas linhas, mais especificamente, dentro da tag “system.webserver” temos que adicionar as seguintes linhas:

    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </handlers>

E aí sim, finalmente, o nosso relatório será exibido com sucesso:

Antes de mostrar como exibir o relatório com a biblioteca ReportViewer for MVC, você notou que o controle está com um tamanho fixo e, dessa forma, o relatório não cabe sem que barras de rolagem sejam exibidas? É muito fácil configurarmos o controle do Report Viewer para que ele ajuste o seu tamanho automaticamente de acordo com o tamanho do relatório. Para isso, basta adicionarmos três linhas no nosso code-behind, logo antes de chamarmos o método Refresh:

                ReportViewer.SizeToReportContent = true;
                ReportViewer.Width = System.Web.UI.WebControls.Unit.Percentage(100);
                ReportViewer.Height = System.Web.UI.WebControls.Unit.Percentage(100);

E com isso o tamanho do controle será ajustado automaticamente dependendo do tamanho do relatório:

Opção 2 – Utilizando a biblioteca ReportViewer for MVC

Agora que já vimos como exibirmos relatórios do Report Viewer em projetos MVC através da criação de um web form, vamos ver como podemos automatizar isso através de uma biblioteca?

Primeiramente, adicione o pacote do NuGet referente à biblioteca ReportViewer for MVC (já mostrei no passado como adicionar bibliotecas do NuGet no Visual Studio, caso você tenha alguma dúvida nesse processo).

Feito isso, adicione um novo Controller na pasta “Controllers“, escolhendo o template “MVC 5 Controller – Empty” e dando o nome de “RelatorioListaPessoaController“. Uma vez que o Visual Studio tenha criado o Controller, adicione o seguinte código do método Index:

        public ActionResult Index()
        {
            var pessoaDataSet = new Models.PessoaDataSet();
            pessoaDataSet.Pessoa.AddPessoaRow("André", "Lima");
            pessoaDataSet.Pessoa.AddPessoaRow("Larissa", "Lima");
            pessoaDataSet.Pessoa.AddPessoaRow("Sophie", "Lima");

            var viewer = new Microsoft.Reporting.WebForms.ReportViewer();
            viewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
            viewer.LocalReport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\RelatorioListaPessoas.rdlc";
            viewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("PessoaDataSet", (System.Data.DataTable)pessoaDataSet.Pessoa));
            
            viewer.SizeToReportContent = true;
            viewer.Width = System.Web.UI.WebControls.Unit.Percentage(100);
            viewer.Height = System.Web.UI.WebControls.Unit.Percentage(100);

            ViewBag.ReportViewer = viewer;

            return View();
        }

Note que o código é extremamente parecido com o código do code-behind apresentado na primeira alternativa. Basicamente criamos uma instância do DataSet, criamos uma nova instância do controle do ReportViewer e configuramos essa instância. A principal diferença é que configuramos uma propriedade chamada “ReportViewer” na ViewBag apontando para o controle que acabamos de criar.

Com isso, podemos agora criar uma nova View que fará a exibição do relatório em si. Para isso, adicione uma nova View na pasta “RelatorioListaPessoa” (que foi criada automaticamente pelo Visual Studio ao adicionarmos o Controller), dando no nome de “Index“.

Dentro da View, adicione a seguinte linha logo no topo do arquivo:

@using ReportViewerForMvc;

Depois, no final do arquivo, adicione o seguinte código:

@Html.ReportViewer(ViewBag.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)

Perceba que o que fizemos aqui foi basicamente adicionarmos uma “referência” aos métodos de extensão da biblioteca (cláusula “using” que adicionamos no início do arquivo). E depois utilizamos o método de extensão “ReportViewer” (disponibilizado pela biblioteca) para exibirmos o relatório que está armazenado na propriedade “ReportViewer” da ViewBag. Bem simples, não é mesmo? Veja só o resultado ao escolhermos a opção “View in browser” dessa View:

Concluindo

Ao trabalharmos com projetos do tipo ASP.NET MVC, temos duas opções para exibirmos relatórios do Report Viewer: a primeira delas é “na mão“, criando um web form com o controle do Report Viewer, e a segunda delas é utilizando a biblioteca ReportViewer for MVC.

Neste artigo você conferiu detalhadamente essas duas maneiras de exibir seus relatórios do Report Viewer em projetos ASP.NET MVC. Eu particularmente prefiro muito mais utilizar a biblioteca ReportViewer for MVC, uma vez que ele já configura o projeto, poupando muito do trabalho que teremos ao tentarmos exibir os relatórios “na mão“. Além disso, o código fica muito mais limpo também.

E você, já precisou exibir relatórios do Report Viewer em projetos ASP.NET MVC? Qual dessas duas modalidades você utilizou? Ou talvez você utilizou algo completamente diferente? Conte nos comentários como é que foi a sua experiência.

Edit: depois de publicar esse post, descobri que o Wennder Santos já tinha escrito sobre esse mesmo tema. Os artigos dele você encontra aqui e aqui.

Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Newsletter do André Lima

* indicates required



Powered by MailChimp

53 thoughts on “Utilizando o Report Viewer no ASP.NET MVC

  • Fala André, blz?
    Bora pro mundo web! hehehe
    Bem didático o post. Há um tempo atrás, precisei gerar relatórios no asp.net mvc e as duas opções que você escreveu foram as soluções que usei.
    Naquela ocasião, acabei escrevendo dois post’s mostrando como fiz. Olha só http://wenndersantos.net/?s=report

    Abraços!

  • William disse:

    Grande mestre do Report Viewer, aqui trabalhamos direto com asp.net mvc e relatórios no Report Viewer, olha vou indicar o material de estudo de quando iniciei no mundo web até videos de outros MVPs que me ajudaram também, o material que eu iniciei meus estudos foi da k19 http://www.k19.com.br/downloads/apostilas/dotnet/k19-k32-desenvolvimento-web-com-aspnet-mvc e posteriormente comprei um livro do Alfredo Lotar que hoje encontra-se defasado devido ao framework abordado ser o MVC3, existem muitas video-aulas de MVPs como Andre Baltieri, Eduardo Pires e existe também o canal do Cleyton Ferrari https://www.youtube.com/user/cleytonferrari, também indico video-aulas da Pluralsight com os MVPs da Microsoft são muito bons

    • andrealveslima disse:

      Olá William!

      Muito obrigado pelo comentário! Vou dar uma olhada nestes links que você indicou, com certeza eles vão ajudar bastante.. Estou pensando em fazer o curso do Eduardo Pires.. Esse que você indicou da k19 pareceu ser muito bom também..

      O único problema desses cursos ao vivo é que o horário acaba sendo normalmente complicado para mim devido à diferença com o meu fuso horário (atualmente 3 horas a mais do que Brasília, daqui uns meses muda para 5 horas a mais).. Sei que a gravação fica disponível depois, mas, a experiência de acompanhar ao vivo é sempre melhor..

      Grande abraço!
      André Lima

  • Ricardo Fagundes disse:

    Bom dia André,
    Estou com a seguinte dúvida, tenho meu portal e estou colocando relatório neles.
    O portal é http://www.consultoriafagundes.com.br está em mvc , e está publicado no portal o azure.
    O que ocorre é que localmente o relatório funciona perfeitamente mas quando público não funciona, já pesquisei em toda a internet não encontrei nada sobre, já verifiquei sobre a versão dos assembly Microsoft.ReportViewer.Webforms.dll ,Microsoft.ReportViewer.Common.dll e os mesmos estão como local.

    Vc pode me ajudar? Tem ideia do que pode estar ocorrendo ?

    • andrealveslima disse:

      Olá Ricardo, tudo tranquilo?

      Você poderia dar mais detalhes sobre o “não funciona”? O que acontece exatamente? Você recebe uma página em branco ou uma página com exception? Você encontrou algum erro no event log do Windows?

      Dê maiores detalhes do erro, aí eu tento te ajudar melhor..

      Abraço!
      André Lima

      • Ricardo Fagundes disse:

        Olá André ,
        Bom no Windows quando do um Build e executo o projeto não dá nenhum erro, ocorre problema quando publico no portal do azure que é onde está hospedado dá um exception e diz que não consegue carregar a Microsoft.ReportViewer.Common.dll a versão da dll é 11 ela está na no projeto está na publicação no web.config está <add assembly="Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=neutral

        • andrealveslima disse:

          Olá Ricardo,

          Dê uma olhada nas propriedades das referências ReportViewer.Common e ReportViewer.WebForms e veja se elas estão configuradas como “Copy Local” = true e Copy always.. Feito isso, publique o site novamente e veja se funciona..

          Se não funcionar, certifique-se que você seguiu todos os passos descritos neste tutorial:

          Use ReportViewer in a Web Site Hosted in Azure

          Abraço!
          André Lima

          • Ricardo Fagundes disse:

            Bom dia André,
            Obrigado pelo auxílio, já descobri com seu auxilio que o ReportViewer não funciona diretamente no Portal Azure se não for criado uma máquina virtual com um banco de dados com o report server instalado . Que pena uma VM no Azure fica caro por enquanto para mim manter mensalmente, eu montei o ambiente em uma VM aqui minha mesmo e funcionou perfeitamente

          • andrealveslima disse:

            Olá Ricardo!

            Eu imagino que deva existir uma maneira de utilizar o Report Viewer no Azure com web sites (sem máquina virtual).. Ainda não consegui encontrar um tempo para dar uma investigada nisso, mas, já está na minha lista.. Assim que eu conseguir verificar isso, eu te aviso aqui..

            Abraço!
            André Lima

          • andrealveslima disse:

            Olá Ricardo!

            Sei que já faz muito tempo que você estava tendo esse problema com o Report Viewer no Azure.. Mas, nessa semana eu publiquei um vídeo mostrando como publicar Report Viewer no Azure (em web application, não precisa de VM).. Caso você ou algum outra pessoa venha a precisar disso no futuro, fica aqui a referência:

            Publicando sites com Report Viewer no Azure

            Abraço!
            André Lima

          • Oi André tudo beleza,

            Então como o Azure estava ficando muito caro mudei para o provedor Arvixe, era a mesma situação só que lá tem que pagar mensalmente pelo servidor do report e é em dólar.
            Ai que seu passo a passo novo deu super certo e está rodando

          • andrealveslima disse:

            Olá Ricardo!

            Entendi.. Que bom que você conseguiu encontrar um provedor mais em conta que o Azure onde o Report Viewer também funciona.. Vou anotar aqui caso eu precise um dia.. Valeu! :)

            Um forte abraço!
            André Lima

  • […] Para demonstrar as funcionalidades de filtro com o Report Viewer, vamos criar um novo projeto do tipo “Windows Forms Application“. Apesar de estarmos trabalhando com Windows Forms nesse artigo, você pode utilizar esses mesmos ensinamentos em projetos web (inclusive, caso você ainda não tenha visto, eu já mostrei no passado como utilizar o Report Viewer com o ASP.NET MVC). […]

  • […] Poderíamos criar qualquer tipo de projeto, uma vez que o Report Viewer funciona também no WPF e em aplicações web. Porém, como é mais fácil explicar com o Windows Forms, (além dessa plataforma já estar […]

  • Cesar disse:

    Se seu tiver meu Banco de dados no postgres
    Eu posso Utilizar o Report View ?

    • andrealveslima disse:

      Olá Cesar!

      Você pode alimentar os relatórios do Report Viewer com dados vindos de uma DataTable ou coleções de objetos .NET.. Dessa forma, não vejo problema algum de você pegar os dados do seu banco Postgres para alimentar uma DataTable ou coleção de objetos, aí é só passar para o Report Viewer normalmente..

      Você já chegou a tentar? Ficou com dificuldade em alguma etapa? Se sim, me dê mais detalhes que eu tento entender o que está acontecendo de errado..

      Abraço!
      André Lima

  • […] Forms Application“, porém, saiba que podemos utilizar o Report Viewer no WPF, no WebForms e até mesmo no MVC. A mesma ideia que eu vou apresentar neste artigo para o Windows Forms se aplicaria para qualquer […]

  • Joao disse:

    Bom dia.

    André,

    Notei que no chrome o icone de impressão não aparece. Como faço para disponibilizar o icone de impressão? Você tem alguma solução para essa situação?

    • andrealveslima disse:

      Olá João!

      O controle do Report Viewer utiliza ActiveX para fazer a impressão pelo componente web.. E ele só deve funcionar no Internet Explorer 9 ou inferior.. Em outros browsers normalmente o ícone de impressão não aparece mesmo e a saída é gerar o PDF do relatório para que o usuário possa imprimí-lo.. Veja mais detalhes nesta thread do StackOverflow:

      Report Viewer Print Button in IE 11

      Abraço!
      André Lima

  • junior disse:

    André estou estudando MVC e já tenho vários sites em produção feitos em Webforms, em todos os meus projetos uso o report viewer e sempre exibo meus relatórios em pdf, segui seu exemplo e com poucas alterações conseguir replicar o mesmo já feito nos projetos aqui em mvc, mais surgiu um problema a exibição do relatório, pois sempre exibo em um pop-up, tentei exibir em modal bootstrap e não deu certo, conseguir exibir com dialog sendo que não ficou como um popup exibiu na tela toda inclusive perdendo a master page(_layout). Vc já viu alguma solução para isso ?

    • andrealveslima disse:

      Olá Junior!

      Deixa eu entender melhor.. Você está exibindo o relatório (PDF) em um pop-up? Como é que está o seu código que não está funcionando corretamente? Será que você poderia enviar mais detalhes para eu entender melhor o que está acontecendo? Se preferir, pode mandar no meu e-mail: contato [arroba] andrealveslima [ponto] com [ponto] br

      Abraço!
      André Lima

      • junior disse:

        byte[] bytes = reportViewer1.LocalReport.Render(“PDF”, null, out mimeType, out encoding, out extension, out streamIds, out warnings);
        Response.Buffer = true;
        Response.ContentType = mimeType;
        Response.AddHeader(“content-disposition”, “attachment; filename=” + fileName + “.” + extension);
        Response.BinaryWrite(bytes); ERRO ACONTECE AQUI
        Response.Flush();
        Response.Clear();

        descrição do erro :
        “OutputStream não está disponível quando TextWriter personalizado é usado.”

        • andrealveslima disse:

          Olá Junior!

          Respondi lá o seu e-mail.. Vamos tentar resolver esse problema lá por e-mail e, assim que conseguirmos, a gente posta aqui como ficou a solução..

          Abraço!
          André Lima

  • Mariana Casarin disse:

    Olá André.
    Primeiro queria te parabenizar pelo artigo, ajudou muito no trabalho que estou desenvolvendo. Mas, encontrei um problema ao continuar minha implementação: O meu report utiliza subreports, e está gerando erro na visualização do relatório. Você já enfrentou um problema desses?

    Obrigada!

    • andrealveslima disse:

      Olá Mariana, obrigado pelo comentário!

      Sim, já enfreitei problemas com sub-reports ao utilizar essa biblioteca.. Inclusive já existe uma issue lá no site da biblioteca sobre esse problema:

      SubreportProcessingEvent is not firing

      Se você der uma olhada nesse link, a última resposta no momento é a minha, onde eu mostro como eu corrigi esse problema no código da biblioteca.. Você pode baixar o código da biblioteca e fazer a mesma alteração ou você pode tentar utilizar a dll que eu gerei com essa correção aqui..

      Depois me avisa se funcionou..

      Abraço!
      André Lima

  • Jorge Oliveira disse:

    Olá, André. Parabéns pelo artigo!

    Trabalho em uma empresa que possui um sistema em windows forms, e estamos com projeto de migração pra web. Seu conteúdo está sendo extremamente útil para nós! Muito obrigado.

    Eu consegui reproduzir o exemplo utilizando a biblioteca ReportViewer for MVC, funcionou certinho. Porém não estou conseguindo exibir uma imagem que seja proveniente de um local físico. Quando o relatório é apresentado, no lugar da imagem fica tudo em branco. O restante do relatório é apresentado normalmente.

    Eu estou passando o caminho físico da imagem por parâmetro para o componente que apresenta a imagem.
    O componente que estou utilizando no rdlc para exibir a imagem é do tipo Image. Nas configurações dele eu coloquei:

    Select the image source: External.
    Use this image: [@nomeDoParametro]

    Antes de criar o parâmetro adicionei a seguinte linha:

    viewer.LocalReport.EnableExternalImages = true;

    Eu crio o parâmetro da seguinte forma:

    List parameters = new List();

    parameters.Add(new ReportParameter(“nomeDoParametro”, @”caminhoImagem”));

    viewer.LocalReport.SetParameters(parameters);

    Você encontrou esse tipo de problema também?

    Obrigado!

    Jorge.

    • andrealveslima disse:

      Olá Jorge, muito obrigado pelo comentário! Fico feliz que o conteúdo dos meus artigos esteja te ajudando nos seus projetos..

      Quanto à sua dúvida, acredito que o problema é que somente passar o caminho como fonte da imagem não é o suficiente.. Se ela não estiver vindo de uma URL (www) e sim de um caminho em disco, você precisa prefixar com “File://”.. Ou seja, você teria que utilizar uma expressão como fonte de dados da sua imagem parecida com isso:

      ="File://" & Parameters!nomeDoParametro.Value
      

      Entendeu?

      Abraço!
      André Lima

  • Fernando disse:

    André! Uau! Porra, te devo uma coca meu velho! Esse seu artigo foi bom demais, consegui desenvolver relatórios aqui seguindo os primeiros passos e depois pulando direto pra segunda etapa (Asp.Net MVC). Ele deu alguns problemas de referência (que tive que adicionar com o Nuget) mas nada demais, rodou redondo!

    Você é realmente O CARA! Show de bola amigo. Parabéns!

    • andrealveslima disse:

      Fala Fernando, muito obrigado pelo comentário! Fico feliz que o conteúdo do artigo tenha te ajudado e, qualquer dificuldade que você encontrar, é só entrar em contato..

      Abraço!
      André Lima

  • Celio Morikoshi disse:

    Parabéns, André!
    Toda vez que preciso implementar alguma função recorro aos seus posts.
    Muito bom, sou desenvolvedor Windows Forms e estou iniciando Web Forms.
    Tem alguma forma de imprimir um cupom fiscal em asp.net(similar ao PrintDocument)?

    • andrealveslima disse:

      Olá Celio, muito obrigado pelo comentário! Fico feliz que as minhas publicações estejam te ajudando.. :)

      Quanto à sua pergunta, eu tenho muito pouca experiência com desenvolvimento web.. Nunca precisei imprimir um cupom fiscal em projetos web.. Acredito que nesse caso a saída é fazer a impressão com alguma ferramenta de relatório (como Report Viewer ou Crystal Reports), ou imprimir direto via HTML + Javascript..

      Você já deu uma pesquisada sobre esse assunto? O que você encontrou até agora?

      Abraço!
      André Lima

  • Igor Gama disse:

    Consegui implementar no meu projeto MV4, porém ao imprimir, aparece o trace no html junto. Como faço para não aparecer este trace?

    • andrealveslima disse:

      Olá Igor!

      Como assim aparece o trace no html junto? Você poderia dar mais detalhes? E qual é o browser que você está utilizando para acessar o site?

      Abraço!
      André Lima

    • andrealveslima disse:

      Olá Igor!

      Conseguiu resolver esse problema? Conta aqui pra gente..

      Abraço!
      André Lima

  • Fábio Cosmo disse:

    Boa noite Andre,
    Estou tentando usar o rdlc com MVC 5 utilizando o visual studio 2017.
    Segui todos os passos que você indicou, mas quando tento colocar
    @using ReportViewerForMvc, não reconhece.
    Você teve esse problema teria alguma dica para me passar por favor?

    Obrigado

    • andrealveslima disse:

      Olá Fábio!

      A versão do Report Viewer no Visual Studio 2017 é mais recente e não é compatível com essa compilação da biblioteca ReportViewerForMvc.. Eu copiei o código dessa biblioteca no meu GitHub e atualizei para a versão mais recente do Report Viewer.. Você pode baixar a release 1.0.2 aqui e tentar trocar a referência para utilizar essa versão ao invés do que vem pelo NuGet.. Só não esqueça de alterar também os números de versão no web.config e no web form utilizado para exibir o relatório..

      Abraço!
      André Lima

  • Thales disse:

    Boa tarde André,

    Depois considera fazer(caso não tenha feito) um artigo sobre report-viewer Remoto no asp.net MVC.

    • andrealveslima disse:

      Olá Thales, obrigado pelo comentário!

      Quando você diz “Report Viewer Remoto”, você está querendo dizer relatórios publicados no Reporting Services? Se for isso, coloquei aqui na minha lista para dar uma investigada no ano que vem..

      Abraço!
      André Lima

  • Umbelino Infante disse:

    Olá André

    Muito obrigado pelo post, muito bom. Segui o exemplo para passar de uma aplicação desktop com relatórios rdlc para uma aplicação web mas o relatório não é renderizado. Inspecionando o elemento html na página vejo uma referência que diz que o iframe não é suportado. Estou a tentar perceber o problema mas tenho alguma urgência, agradeço qualquer ajuda.

    ASP.NET, MVC 5, Visual Studio 2017.
    ReportViewerForMvc v1.1.1.0
    Microsoft.ReportViewer.ProcessingObjectModel
    Microsoft.ReportViewer.WebForms v11.0.0
    Microsoft.SqlServer.Types v14.0.314.76 (Tentei antes a versão 11)
    Microsoft.ReportViewer.Common

    Inspencionando o Elemento:

    iframes not supported.

    ReportViewerForMvc.setIframeId(‘r40e1c305-fd01-417e-970d-01a508bfea6b’);

    Web.config:

    <!– … 

    • andrealveslima disse:

      Olá Umbelino, obrigado pelo comentário!

      Que estranho hein.. Você já tentou seguir exatamente o mesmo tutorial em um projeto novo, só para ver se você não está acidentalmente pulando alguma etapa? O seu projeto é com o ASP.NET “full”, e não o “Core”, certo?

      Abraço!
      André Lima

      • Umbelino Infante disse:

        Olá André
        Muito obrigado pelo retorno. É como você falou, criei um projeto novo seguindo o seu tutorial e funciona. Como eu dizia no meu post, estou a passar uma aplicação desktop para uma aplicação web. Eu simplesmente importei o relatório (rdlc) da aplicação antiga para o meu projeto web, um relatório complexo feito no Visual Studio 2010. Como sempre funcionou e também porque não gerou nenhum erro não me ocorreu que poderia ser do relatório. No mesmo projeto web, com um relatório simples funciona. Muito obrigado, o mais importante está resolvido, queria manter a estrutura MVC.
        Abraço

        • andrealveslima disse:

          Olá Umbelino!

          Então pode ser algum problema na hora de carregar esse relatório especificamente.. Talvez algo que esteja faltando no controller na hora de alimentar o relatório? Ou alguma coisa errada na view? Pelo menos, como funcionou com um relatório mais simples no mesmo projeto, você tem certeza que o problema não está nas referências do projeto, etc.. É alguma coisa específica na chamda desse relatório..

          Abraço!
          André Lima

  • Rafael Casado disse:

    Ótimo Post! Super esclarecedor. O passo a passo demonstrando e corrigindo os erros apresentados foi perfeito. Seguindo não tem não dar errado. Boa sorte!

Deixe uma resposta

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