Criando relatórios com Crystal Reports e ASP.NET – Parte 4


Nos posts Criando relatórios com Crystal Reports e ASP.NETParte 1, Parte 2,Parte 3 nós desenvolvemos o coração do relatório.Nessa última parte vamor finalizar o relatório com o rodapé,e depois veremos como manipula-lo em tempo de execução e como visualiza-lo na página .aspx.

Criando o rodapé

O último passo no desenvolvimento do relatório é ádiconar o número da página na seção “Page Footer”:

  1. Clique com o direito na seção “Page Footer” e selecione “Insert Special Field Page N of M”.
  2. Arraste o campo para a seção “Page Footer”.
  3. Deixe o campo da largura da página.
  4. Clique com o direito no campo e selecione “Format Object”.
  5. Na aba “Common”,mude o alinhamento horizontal para “centered” e clique OK.

Se você ver o relatório agora,vai notar que o número da página reseta  para 1 cada vez que o “SalesOrderNumber” muda.

Visualizando o relatório na página ASP.NET

Agora que o relatório está pronto,podemos criar a página para visualiza-lo.Vamos criar uma página simples que permite ao usuário selecionar o cliente e ver qualquer fatura para o mesmo.

  1. Abra a página Default.aspx no VS.Adicione a seguinte declaração logo abaixo da tag “Page”,ou simplesmente arraste o controle Crystal Reports Viewer para a página:
<%@ Register assembly=”CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304″ namespace=”CrystalDecisions.Web” tagprefix=”CR” %>

Isso permite você usar o controle Crystal Reports Viewer que vem com o VS.

Adicione o seguinte código entre as tags “DIV”:

Select a customer:<asp:DropDownList ID="ddlCustomer" runat="server">
</asp:DropDownList>

<asp:Button ID="btnPreview" runat="server" onclick="btnPreview_Click"
  Text="Preview" />

<br />
<br />
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"
  AutoDataBind="true" />

Isso adiciona um DropDownList que será preenchido com a lista de Customers (clientes) no Page_Load da página.O botão preview irá buscar todos os dados do cliente selecionado e dar uma bind no relatório.

  1. Adicione os seguintes namespaces no code behind:
using System.Data.SqlClient;
using System.Configuration;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

Adicione o seguinte código no evento Page_Load:

if (!IsPostBack)
{

SqlConnection cn = new SqlConnection(
ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString);
cn.Open();

SqlCommand cmd = new SqlCommand(“SELECT DISTINCT LastName + ‘, ‘ +
FirstName AS Name,
Person.Contact.ContactID ” +
“FROM Sales.SalesOrderHeader ” +
“INNER JOIN Person.Contact ” +
“ON Sales.SalesOrderHeader.ContactID =
Person.Contact.ContactID ” +
“ORDER BY LastName + ‘, ‘ + FirstName”, cn);
SqlDataReader dr = cmd.ExecuteReader();

ddlCustomer.DataSource = dr;
ddlCustomer.DataTextField = “Name”;
ddlCustomer.DataValueField = “ContactId”;
ddlCustomer.DataBind();

CrystalReportViewer1.Visible = false;
}
else
{
if (CrystalReportViewer1.Visible == true)
{
BindReport();
}
}

Esse código carrega o DropDownList com os customers do banco.Você precisa adicionar a ConnectionString do seu banco no Web.Config pra esse código funcionar.Na seção “AppSettings” você deve adicionar o seguinte:

<connectionStrings>

<add name="AdventureWorks" connectionString="Data Source=YOURSERVER;User
  ID=aspalliance;Password=aspalliance;Initial Catalog=AdventureWorks;"/>
</connectionStrings>

Esse código assume que você tenha um Login “aspalliance” com a senha “aspalliance” e as devidas permissões no banco.Seu SQL precisa estar configurado para o modo “Mixed Authentication” pros logins serem permitidos.

Adicione o seguinte código no evento de click do botão preview:

protected void btnPreview_Click(object sender, EventArgs e)
{
BindReport();
CrystalReportViewer1.Visible = true;
}

Esse código chama o método “BindReport()” e depois mostra o controle Report Viewer.

Agora adicione os seguintes métodos:

private void BindReport()
{
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath(“Invoice.rpt”));

SetTableLocation(report.Database.Tables);

CrystalReportViewer1.ReportSource = report;

report.DataDefinition.RecordSelectionFormula =
“{SalesOrderHeader.ContactID} = ” + ddlCustomer.SelectedItem.Value;
}

private void SetTableLocation(Tables tables)
{
ConnectionInfo connectionInfo = new ConnectionInfo();

connectionInfo.ServerName = @”LTMTI30\SQL2008″;
connectionInfo.DatabaseName = “AdventureWorks”;
connectionInfo.UserID = “aspalliance”;
connectionInfo.Password = “aspalliance”;

foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogOnInfo = table.LogOnInfo;
tableLogOnInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogOnInfo);
}
}

O primeiro método cria a instância da classe ReportDocument.Ela representa o relatório que você criou anteriormente e permite manipula-lo em tempon de execução.O método SetTableLocation seta a “table location” de cada tabela do relatório.De novo,isso assume que você criado o Login “aspalliance” no SQL e tenha dado acesso a ele.A fonte (source) do Crystal Reports Viewer é depois setada para o objeto do relatório.Você cria uma string simples como uma clausula where de comando SQL.Você tem que usar “{}” em volta de campos referenciados do relatório.

Você pode rodar o relatório agora.Se você selecionar “Abel,Catherine” no DropDownList e clicar no botão preview,você deve ver a seguinte página:

É isso!Elaboramos nosso relatório,nas Partes 1,2 e 3 e nesta última parte vimos como visualiza-lo na página .aspx.

Espero que essa série de posts tenha sido útil pra quem está começando com relatórios ,e que percebam que não é nenhum bicho de 7 cabeças.

Mais sobre o Crystal Reports com ASP.NET.

Até a próxima!

2 comentários sobre “Criando relatórios com Crystal Reports e ASP.NET – Parte 4

  1. Show de bola amigo. Me ajudou e muito.Com certeza irei visitar bastante o seu blog para futuros novos aprendizados.Abraços!

    Responder

Deixe um comentário