Olá pessoal, neste artigo veremos a codificação de nosso projeto e o resultado final, gerando assim um relatório customizado, de acordo com o parâmetro informado pelo usuário. Acompanhem:

 Voltando de onde paramos, expanda a aba Field Explorer, clique com o botão direito em Database Fields e clique em Database Expert. Expanda a aba ADO.NET DataSets, clique na tabela Products e clique no botão para enviá-la para o lado direito, fazendo assim com que o Relatório possa usar os dados desta tabela. Veja a tela, na Figura 01:


Figura 01 – Tela do Database Expert

 Arraste alguns campos para seção 3 (que se replicaram na seção 2), no exemplo arrastei os campos ProductID, ProductName, UnitPrice e UnitsInStock. Na seção 1, que é o cabeçalho, clique com o botão direito em Insert > Text Object. Dê um título para o relatório. Veja como deve ficar o layout final de nosso relatório, na Figura 02:


Figura 02 – Layout Final do Relatório

 Finalizando a parte de Design, crie um novo Formulário e arraste para ele o controle CrystalReportViewer.

 Va á página de códigos do Formulário e declare os seguintes namespaces:



using System.Data.SqlClient;

using System.Configuration;
 

Agora crie um método chamado CarregarRelatorio e o chame no evento Load do seu formulário. Acompanhe a codificação (note que são apenas comandos básicos do ADO.NET):


 
private void CarregarRelatorio()

        {

            try

            {

                string strConexao = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;

                string strCommand = "SELECT * FROM Products";

 

                SqlConnection objConexao = new SqlConnection(strConexao);

                SqlCommand objCommand = new SqlCommand(strCommand, objConexao);

                SqlDataAdapter objAdapter = new SqlDataAdapter();

                DataSet objDataSet = new DataSet();

                Produtos objReport = new Produtos();

               

                objCommand.Connection = objConexao;

                objAdapter.SelectCommand = objCommand;

                objAdapter.Fill(objDataSet, "Products");

                objReport.SetDataSource(objDataSet);

 

                crystalReportViewer1.ReportSource = objReport;

            }

            catch (Exception ex)

            {

                MessageBox.Show("Erro: " + ex.Message);

            }

        }


 Agora vá ao Form1, dê dois cliques no botão Gerar Relatório e instancie o Form2 chamando seu método ShowDialog(). Aperte F5, clique no botão e veja o resultado, como ilustra a Figura 03:


Figura 03 – Relatório com os dados da tabela Products

 Finalizando, vamos passar um filtro para o Relatório. Para isso, vá ao Report, abra a janela Field Explorer, clique com o botão direito em Parameter Fields e clique em New. Dê um nome ao parâmetro e clique em OK.

 Agora clique com o botão direito em qualquer parte do relatório, e selecione a opção Report > Selection Formula > Record (será aberto o editor de fórmulas do Crystal Report).

 Assim irei codificar para que meu relatório exiba os registros cujo ID for maior que o que eu passar no TextBox do Form1. Veja como isso é feito, na Figura 04:


Figura 04 – Editor de Fórmulas do Crystal Report

 Aperte ALT + C para checar se tem erros na fórmula. Se não tiver dê um CTRL + S para salvar a fórmula e fechar a tela.

 Agora crie uma variável global no Form2 do tipo string, que receberá o parâmetro vindo do Form1. Para isso devemos alterar o construtor de nossa classe do Form2. Veja nos códigos abaixo:


private string strParametro = string.Empty;

        public Form2(string parametro)

        {

            this.strParametro = parametro;

            InitializeComponent();

        }
 

Finalmente, na chamada ao Form2, no evento click do btnGerarRelatorio, passe como parâmetro o txParametro.Text. Faça o teste informando o ID 30 e clicando no botão. Veja o resultado, na Figura 05:


Figura 05 – Produtos com ID maior que 30

 Assim finalizo o artigo. Muito obrigado a todos!

 Créditos à Bruno Belizário, que fez as videoaulas e ao Portal Linha de Código, por  onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.

 Um abraço, e até o próximo artigo.

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com