Neste artigo, estarei abordando uma forma de se utilizar relatórios do Crystal Reports vinculado com uma fonte de dados criado por um objeto DataTable.
Normalmente, desenvolvemos os relatórios em Crystal utilizando como fonte o local onde os dados estão armazenados (ou seja, acessando diretamente o banco de dados), obtendo as informações através de uma consulta parametrizada, ou de uma tabela, ou de uma View, ou Stored Procedure.
Raramente utilizo um DataTable. Porém, um cliente nosso nos solicitou um relatório complexo, de forma que seria necessária a criação de várias consultas, ou uma stored procedure complexa dentro do banco de dados. Mesmo assim, a tabela do banco deveria ser “dobrada”, as linhas se tornariam colunas, etc... E apesar disso, o preenchimento dos dados deveria ser feito de acordo com várias regras que englobavam uma determinada situação, algo que nos demandaria tempo demais para reproduzir no banco de dados, mas que já era tratado no nosso software porque havia desenvolvido uma classe que gerenciava estas regras.
Resumindo... não existia outra alternativa, eu tinha que fazer a extração, o “garimpo” dos dados de acordo as regras da classe gerenciadora. Decidido isso, resolvi optar pela criação de um DataTable, onde os dados seriam processados programaticamente, e depois formatados para serem exibidos no relatório. O resultado não poderia ter sido outro, e o cliente ficou muito satisfeito...
Obviamente, como não estava familiarizado com o DataTable, é óbvio que no começo eu apanhei um pouco. E por isso estou escrevendo este artigo, para que vocês programadores não “sofram” como sofri...
Bem, primeiramente, vamos falar um pouco sobre o DataTable. O DataTable é uma tabela de dados criada na memória do seu computador. A vantagem de se utilizar o DataTable é que geralmente ganha-se mais em desempenho e performance do sistema, porque teoricamente o sistema não precisa ficar fazendo novas consultas ao banco de dados para atualizar registros. Você pode utilizar os registros manuseando os dados de um DataTable, e posteriormente fazer a atualização no Banco de Dados.
O objeto DataTable será criado dentro de um objeto DataSet tipado, que será vinculado como fonte de dados do nosso relatório. A criação de um DataSet tipado é bastante simples, o Visual Studio se encarrega de fazer tudo sozinho, sobrando apenas para o programador utilizar os métodos gerados pelo Visual Studio para preencher os dados no DataTable. Vamos lá...
- Inicialmente, abra o Visual Studio e crie um novo projeto:
