Aug
12
2013

Relatório em um projeto MVC

Bom, vou resumir a história.

Trabalhando em um projeto usando o modelo MVC no Visual Studio 2012, precisei criar um relatório para apresentar algumas informações, e a informação a ser mostrada no relatório não seria recuperada diretamente da base de dados, usando uma conexão padrão. As informações apresentadas seriam recuperadas internamente e um objeto criado dentro do projeto seria a fonte dos dados do relatório.

Aparentemente uma tarefa extremamente simples. Criar a classe com a estrutura dos dados a serem apresentados no relatório. Criar uma classe que retorne uma lista dessa classe da estrutura. Abrir o relatório, selecionar como fonte de dados a classe contendo a função que retorna a lista, organizar as informações dentro do relatório. No Visual Studio 2010 eu já havia feito isso sem nenhum problema, então não havia com o que me preocupar.

Entretanto, após criar as classes, compilar o projeto e criar o relatório, eis que a classe não aparece como possível fonte de dados no relatório. Havia apenas a opção da conexão direta com o banco de dados, ou então a opção de criar um DataSet no projeto, coisa que eu não queria fazer. Comecei então a fazer diversos testes, para encontrar uma solução para o caso. Encontrei diversas referências, como as propriedades deveriam ser de tipo básico (string, int, etc), que a Namespace  da classe deveria ser a mesma do projeto, que a classe deveria estar em uma pasta específica. Porém, nenhuma dessas referências resolveu o meu problema. E então comecei uma pesquisa atrás de uma solução para o meu problema. E isso me tomou aproximadamente 2 dias de trabalho.

Após procurar por uma solução, e tentar as mais diversas palavras no google, finalmente encontrei uma referência que resolveu o meu problema. Ela estava nesse blog: http://ata2931977.blogspot.com.br/2012/07/rdlc-reports-in-mvc-web-application.html (thanks Ali Taki). Essa publicação explica um passo a passo de como adicionar um relatório simples em um projeto C# usando o modelo MVC, e que faz referência ao problema que passei. A lista da propriedade “Data Source” está vazia e ao tentar criar uma conexão aparece apenas a possibilidade de conexão com o banco de dados. E a solução para o problema é adicionar uma Web Form Page ao projeto, vazia mesmo. Eu claro, adicionei nessa página, que nomeei como “Nada.aspx“, um comentário oportuno:

Aqui temos uma página que serve apenas para que o Report carregue as informações
das classes do projeto para que os Bussiness Objects apareçam como fonte de dados
para geração dos relatórios.

Eu também tentei achar alguma ligação para a lista de fonte de dados apresentar as classes do projeto apenas quando uma Web Form Page é adicionada ao projeto. Meu primeiro pensando foi que alguma referência é adicionada ao projeto, já que para carregar a lista o pessoal deve usar alguma função para disparar a leitura das classes internas procurando por uma interface conhecida. Porém, depois de ter perdido praticamente 2 dias nesse problema, eu não estava mais disposto a gastar muito mais tempo com isso. Então após algumas poucas tentativas, decidi deixar essa questão para mais tarde.

Espero que essa publicação possa ajudar alguém que passe pelo mesmo problema. E se alguém souber o motivo da lista estar vazia e ser preenchida apenas ao adicionar a Web Form Page, por favor, compartilhe conosco.

 

2 Responses to “Relatório em um projeto MVC”

  1. Isso tudo me lembra o QuickReport do Delphi, hehe.
    Engraçado, porque eu sofria para mostrar alguma coisa que não viesse diretamente do banco de dados.

    Mas pergunta lá no StackOverflow.com, você pode conseguir uma boa resposta.

  2. Caro Rafael, parabéns pelo post.
    Também estou há 2 dias tentando resolver essa referência de DataSet que chama direto do web.config.

Leave a Reply