Nos posts Criando relatórios com Crystal Reports e ASP.NET – Parte 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”:
- Clique com o direito na seção “Page Footer” e selecione “Insert Special Field Page N of M”.
- Arraste o campo para a seção “Page Footer”.
- Deixe o campo da largura da página.
- Clique com o direito no campo e selecione “Format Object”.
- 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.
- 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:
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.
- Adicione os seguintes namespaces no code behind:
using System.Configuration;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
Adicione o seguinte código no evento Page_Load:
{
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:
{
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:
{
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!
Realmente show de bola!
Comentei no final pq já vi todos.
Parabéns pelo seu empenho em postar informação tão bem explicada.
Show de bola amigo. Me ajudou e muito.Com certeza irei visitar bastante o seu blog para futuros novos aprendizados.Abraços!