Resumo: Os Sub-relatórios pode matar o desempenho de um relatório, mas quando usado com um pouco de imaginação pode ser uma ferramenta útil na expansão de funcionalidades do Crystal Reports em uma maneira que não pode ser realizado por qualquer outro método.
Eu odeio sub-relatórios e sempre considero-os o último recurso em qualquer solução de relatórios. Nove em cada dez vezes requisitos de informação podem ser atendidas utilizando um pouco de premeditação e planejamento (e um sólido conhecimento de fórmulas).
Dito isto, há algumas novas maneiras de usar sub-relatórios que não vai afetar o desempenho e realmente será uma vantagem para o desenvolvedor
1. Cabeçalho do Relatório
Qualquer informação, gráficos, logotipos ou campos especiais, que aparecerá em todos os relatórios podem ser construídos em um sub-relatório que é então adicionado ao relatório principal.
O impacto no desempenho é mínimo,Mas o benefício real vem quando a empresa decide atualizar seu logotipo ou a cor corporativa, Enquanto o sub-relatório é definido como "Re-import ao abrir" , apenas um sub-relatório de precisa ser alterado para impacto em toda a biblioteca relatório inteiro.
2. Conciliar grupos em conflito
Muitas vezes, há uma exigência para mostrar a mesma informação resumida por grupos logicamente conflitantes. Por exemplo: mostrando o total de vendas para cada semana dentro de um mês e totais de vendas por equipe em um mês.
Um relatório típico sub pode ser usado para carregar os dados novamente, em seguida, grupo pelo segundo valor, e esta é a maneira típica de usar um sub-relatório . Mas acessando o banco de dados novamente para os dados que você tem é um desperdício de recursos que pode ser incapacitante com relatórios maiores.
A maneira mais eficiente de lidar com isso é carregar as informações que deseja em um ou mais arrays e passá-las por meio do sub-relatório grupo para formatar e como você quer.
É possível exibir a matriz no relatório principal e renunciar à necessidade de um sub-relatório em todos , mas se você está relatando contra um monte de dados há uma chance de o relatório ser feito antes da matriz e for totalmente exibido.
3. Condicional Metas de Dados
Me deparo com esta questão com bastante frequência: um relatório é necessário sempre que mostra o mesmo conjunto de dados, além de um dos dois (ou mais) outros conjuntos de dados, dependendo da escolha do usuário ou os resultados retornados a partir do primeiro conjunto de dados.
Porque um único relatório só pode ter um conjunto de tabelas vinculadas, vários sub-relatórios deve ser usado.
Por exemplo : um relatório de vendas mostra a receita para um escritório particular, se o escritório atingiu seu alvo os gestores eles querem ver como eles se comparam com o resto dos outros escritórios, mas se eles não conseguem atingir o seu objetivo eles querem ver as vendas discriminadas por cada representante para identificar as áreas problemáticas.
Um relatório é baseado em representantes de vendas e um escritório de vendas nação requerem tabelas completamente diferentes. A maneira mais eficiente para resolver este problema é criar um sub-relatório para cada .
segunda-feira, 7 de novembro de 2011
quinta-feira, 3 de novembro de 2011
5 Testes de Performance Top por Dove Jason(Crystal reports)
Como melhorar a eficiência de qualquer Crystal Report utilizando uma ou mais das cinco etapas neste artigo :
Desastre!
Você tenta executar o relatório por um mês no banco de dados e não os dois dias de teste de dados que você usou para o desenvolvimento.
De repente, tempo de execução do seu relatório vai de 20 segundo a duas horas.
Cada desenvolvedor de Cristal Reports experimentou essa situação e pode ser um dos aspectos mais frustrantes do design do relatório.
Felizmente, há uma variedade de coisas que pode ser feito para combater o mau desempenho, qualquer um dos quais possa colher benefícios enormes.
Aqui estão as cinco causas mais prováveis do mau desempenho e como mitigar seus efeitos.
1. A base de dados criada
Isto pode ou não pode estar dentro de seu controle direto de alterar, mas bancos de dados não estão configurados idealmente.
Dois principais candidatos são:
a: Os campos que você está filtrando não são indexados. Você pode verificar se este é ou não o caso, referindo-se a guia Vinculação na janela Database Expert. Campos indexados têm marcadores coloridos ao lado deles.
Eu pessoalmente tenho visto relatórios de executar centenas de vezes mais rápido devido à adição de um índice que está sendo adicionado a uma importante (para o filtro de relatório) de campo.
b: Usando uma visão, em vez de uma tabela para relatório pode ser devastador para o desempenho de um relatório. Isto é principalmente devido aos pontos de vista não ter índices. A vista é uma coleção de tabelas (muito parecido com um relatório básico) e é freqüentemente usado para simplificar os dados para usuários finais.
A única maneira de evitar isso é para informar sobre as tabelas que compõem a vista. Identificar se a fonte de um campo é uma tabela ou uma exibição pode ser feito através do Database Expert como tabelas e exibições são listados separadamente.
Identificar quais tabelas compõem uma visão pode ser muito mais complicado e você pode precisar da ajuda da documentação do banco de dados.
Além disso, quando se utiliza bancos de dados Oracle, desativando a opção case sensitive em consultas pode realmente acelerar o relatório vezes, mas poderá exigir relatórios existentes para ser reescrito.
2.Using o driver ODBC errada.
Drivers ODBC são como o Crystal Reports atribui ao banco de dados. Geralmente, há uma variedade de drivers ODBC que irá trabalhar para qualquer marca particular de banco de dados e alguns são melhores do que outros.
A única maneira de realmente testar isso é para executar o relatório com todos os drivers adequados ODBC e ver qual é o mais eficiente.
A experiência me ensinou que o driver ODBC fornecidos com o software associado ao banco de dados é geralmente a melhor opção.
Use 3.Excessive dos Relatórios Sub
Cada relatório de sub é como um outro relatório acessando o banco de dados, e se esse relatório sub é colocado no Detail Seção ele será executado para cada registro das cargas relatório principal. Mesmo se colocada em um grupo de seção do relatório sub ainda vai ser executado várias vezes.
Seções relatório são geralmente o lugar ideal para a casa de um relatório de sub como eles serão executados apenas uma vez. Mas isso ainda vira um relatório em duas, na medida do desempenho está em causa.
A melhor maneira de negar o problema de desempenho causada pelo sub relatórios é não usá-los.
Noventa e nove por cento de relatórios sub não são necessários e o mesmo resultado pode ser alcançado através de outros métodos de agrupamento, executando totais e / ou fórmulas.
4.Table Linking
Outra coisa senão um tipo de link de iguais ('=') irá causar uma degradação enorme no desempenho.
O Link janela Opções (acessível através botão direito do mouse em um link específico) permitirá que qualquer valor seja reposto.
Se houver uma necessidade para esta época do link, o mesmo resultado pode ser alcançado através da seleção de grupo ou através de formatação (e escondendo os registros indesejados), uma vez que são carregados no relatório.
5. Seleção de registro
Quando o código para a seleção de registro está escrito corretamente, o Crystal Reports vai passar toda a lógica para o banco de dados como SQL e retornar apenas os dados necessários.
Se a seleção de registro não é escrito de uma forma amigável SQL, Crystal Reports vai trazer de volta todos os dados e depois filtrá-la localmente. Isto pode ser drasticamente mais lento do que quando calculados na base de dados.
Usando o Record Expert Selector irá garantir que qualquer filtro criado será avaliada na base de dados e ser o mais eficiente possível.
Um ponto adicional que pode fazer a diferença em alguns casos é quando o relatório é programado para ser executado. Tráfego de rede ou uso de banco de dados pode afetar tempo de execução de um relatório.
Trabalhando através dos pontos acima irá aumentar a eficiência de seus relatórios lentamente em execução. Construção de seus relatórios com tudo isso em mente desde o começo você vai economizar tempo redesenvolvimento depois.
Crystal Reports-(21)
A seção seguinte descreve como implantar um Cristal Reports componentes e conjuntos na máquina de destino.
Crystal Reports para Visual Studio ships com seus projetos de implantação que permitem implantar componentes Crystal Reports e montagens na máquina de destino. Podemos usar abordagens diferentes para instalar o Crystal Reports "arquivos de execução" na máquina de destino para executar seus aplicativos C # sem problemas.
Se você estiver usando Visual Studio, em seguida, durante a sua instalação e implantação você pode adicionar o CRRedist2005_x86.msi arquivo para o seu ficheiro de configuração e distribuí-lo como um arquivo de configuração única, com sua aplicação C #. O instalador pode executar o arquivo de configuração automaticamente dentro do seu projeto. Líquido em um único clique.Você pode encontrar o arquivo CRRedist2005_x86.msi em seu sistema C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ carregador \ Packages \ CrystalReports . Além disso, você pode distribuir o CRRedist2005_x86.msi separadamente e instalá-lo na máquina de destino, onde suas aplicações C # instalado.
A outra maneira de instalar o Crystal Reports na máquina de destino é criar um arquivo de instalação usando Merge Modules e distribuí-lo com o seu aplicativo C # ou como um arquivo de configuração separado. Clique no link a seguir para ver como fazer um arquivo de configuração com Merge Modules.http://csharp.net-informations.com/crystal-reports/csharp-crystal-merge-module.htm
Crystal Reports para Visual Studio ships com seus projetos de implantação que permitem implantar componentes Crystal Reports e montagens na máquina de destino. Podemos usar abordagens diferentes para instalar o Crystal Reports "arquivos de execução" na máquina de destino para executar seus aplicativos C # sem problemas.
Se você estiver usando Visual Studio, em seguida, durante a sua instalação e implantação você pode adicionar o CRRedist2005_x86.msi arquivo para o seu ficheiro de configuração e distribuí-lo como um arquivo de configuração única, com sua aplicação C #. O instalador pode executar o arquivo de configuração automaticamente dentro do seu projeto. Líquido em um único clique.Você pode encontrar o arquivo CRRedist2005_x86.msi em seu sistema C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ carregador \ Packages \ CrystalReports . Além disso, você pode distribuir o CRRedist2005_x86.msi separadamente e instalá-lo na máquina de destino, onde suas aplicações C # instalado.
A outra maneira de instalar o Crystal Reports na máquina de destino é criar um arquivo de instalação usando Merge Modules e distribuí-lo com o seu aplicativo C # ou como um arquivo de configuração separado. Clique no link a seguir para ver como fazer um arquivo de configuração com Merge Modules.http://csharp.net-informations.com/crystal-reports/csharp-crystal-merge-module.htm
Crystal Reports-(20)
Como imprimir o Crystal Reports em C# :
segue-se o código fonte :
segue-se o código fonte :
using System;
usando System.Windows.Forms;
usando CrystalDecisions.CrystalReports.Engine;
usando CrystalDecisions.Shared;
namespace WindowsApplication1
{
Form1 public partial class: Form
{
public Form1 ()
{
InitializeComponent ();
}
private void Button1_Click (object sender, EventArgs e)
{
CryRpt ReportDocument ReportDocument = new ();
cryRpt.Load ("PUT PATH CRYSTAL RELATÓRIO AQUI \ CrystalReport1.rpt");
CrtableLogoninfos TableLogOnInfos = new TableLogOnInfos ();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo ();
ConnectionInfo crConnectionInfo = new ConnectionInfo ();
CrTables tabelas;
crConnectionInfo.ServerName = "SEU SERVERNAME";
crConnectionInfo.DatabaseName = "NOME DATABASE";
crConnectionInfo.UserID = "USERID";
crConnectionInfo.Password = "SENHA";
CrTables = cryRpt.Database.Tables;
foreach (CrTable CrystalDecisions.CrystalReports.Engine.Table em CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo (crtableLogoninfo);
}
cryRpt.Refresh ();
cryRpt.PrintToPrinter (2, true, 1, 2);
}
}
}
Crystal Reports-(19)
O programa a seguir descreve como gerar um Date to Date report do Crystal Reports em C # :
criando dois parâmetros (dateFrom e dateTo).
Date From :
criando dois parâmetros (dateFrom e dateTo).
Date From :
Date To :
Aqui temos três tabelas selecionadas para o relatório (ordermaster, OrderDetails e product) e estamos fazendo a fórmula como, selecione todos os registros das tabelas cuja data do pedido está entre parâmetro e fromDate paramater ToDate. Para fazer isso você tem que selecionar a partir da data como Ordermaster.orderdate, até à data como Ordermaster.orderdate, operadores de comparação, operador booleano (AND) e campos de data e parâmetros fromdate,todate da lista de seleção de Formula Editor e fazer a fórmula.A figura a seguir mostra como selecionar os campos de editor de fórmulas e fazer a fórmula. Duplo clique em cada campo, em seguida, ele será automaticamente selecionado.
Copie e cole o seguinte código-fonte :
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt");
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;
ParameterFieldDefinitions crParameterFieldDefinitions ;
ParameterFieldDefinition crParameterFieldDefinition ;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
crParameterDiscreteValue.Value = textBox1.Text;
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["fromDate"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
crParameterDiscreteValue.Value = textBox2.Text;
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["toDate"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
crConnectionInfo.ServerName = "YOUR SERVERNAME";
crConnectionInfo.DatabaseName = "DATABASE NAME";
crConnectionInfo.UserID = "USERID";
crConnectionInfo.Password = "PASSWORD";
CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();
}
}
}Crystal Reports-(18)
Agora falarei como mostrar o sub-report quando o usuário clicar no hyper link no Crystal Report principal .
que é quando o usuário clicar no link, em seguida, exibir somente o sub-report, isso é chamado de On Demand Report .
que é quando o usuário clicar no link, em seguida, exibir somente o sub-report, isso é chamado de On Demand Report .
Selecione o objeto de sub-report no Crystal Reports e clique com o botão direito e selecione Format Object .Então você terá o Format Editor .Selecione a guia sub-report do Format Editor, você pode encontrar lá uma caixa de seleção On-demand Sub-report .
Você tem que selecionar a caixa de seleção, em seguida, o sub-report torna-se como um link em seu Crystal Reports principal.Se você quiser alterar o título, você pode mudá-lo na textbox de sub-report.então finalmente clique no botão OK.
Copie e cole o seguinte código-fonte :
using System; using System.Windows.Forms; using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ReportDocument cryRpt = new ReportDocument(); cryRpt.Load(coloque o diretório aqui\\CrystalReport1.rpt"); crystalReportViewer1.ReportSource = cryRpt; crystalReportViewer1.Refresh(); } } }
Crystal Reports-(17)
Iremos agora falar sobre Crystal C# sub-relatórios :
Sub-relatório no Crystal Reports significa um relatório dentro de um Crystal Report. Quando queremos mostrar algumas informações adicionais sobre um campo de dados em uma linha Crystal Reports, usamos os recursos sub-relatórios para mostrar os detalhes. Nós podemos mostrar sub relatório de duas maneiras, a primeira maneira é mostrar diretamente sob os detalhes da linha principal. O outro método é mostrar como C # Relatórios Cristal on demand sub-relatórios , isso significa que nós colocamos um Hiper link logo abaixo da linha arquivada, e quando o usuário clicar nesse hyper link ele vai mostrar o sub-relatório.
Sub-relatório no Crystal Reports significa um relatório dentro de um Crystal Report. Quando queremos mostrar algumas informações adicionais sobre um campo de dados em uma linha Crystal Reports, usamos os recursos sub-relatórios para mostrar os detalhes. Nós podemos mostrar sub relatório de duas maneiras, a primeira maneira é mostrar diretamente sob os detalhes da linha principal. O outro método é mostrar como C # Relatórios Cristal on demand sub-relatórios , isso significa que nós colocamos um Hiper link logo abaixo da linha arquivada, e quando o usuário clicar nesse hyper link ele vai mostrar o sub-relatório.
Nesta seção nós vamos gerar um sub-relatório sobre os detalhes da linha principal.
Aqui nós vamos criar um relatório de ordem baseada em três tabelas no banco de dados e mostrar um sub-report para cada campo de linha de nome do produto.
Crie um Crystal Reports usando três tabelas e selecione customername , date , product e qty .
Próximo passo é criar um sub-report dentro do relatório principal.
Após criar o relatório principal, clique com o botão direito sobre a janela Crystal Reports designer e selecione Insert->Subreport.
Então você vai ter o objeto sub-report, arraste o objeto na janela de designer na parte de baixo da aba detalhes, logo abaixo os campos na guia detalhes. Quando você soltar o mouse você vai ter uma caixa de diálogo pedindo nome do relatório. Digite um nome de relatório e clique no botão Report Wizard Button .
O assistente mostra a tela de seleção da tabela e selecione a tabela. Aqui, neste caso, temos de seleccionar a tabela product da lista e clicar em NEXT.
A próxima tela está mostrando a tabela, a partir daí selecione os campos que pretende mostrar os dados e clique em FINISH .você vai ter a tela de sub-report principal novamente e selecione guia-link .
O link-tab está fazendo relação com o seu relatório principal e sub-relatório. Aqui estamos ligando o productname de relatório principal para o sub-relatório. Para isso selecione Product.Product_name de Available fields .
Aceite as outras configurações como está na tela e clique em ok.Agora você pode ver o objeto de sub-report na tela, se você quiser re-organizar projeto sub-report, clique duas vezes no objeto sub-report, então você vai para a tela de design do sub-report.
copie e cole o seguinte código :
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load(PUT CRYSTAL REPORT PATH HERE\\CrystalReport1.rpt");
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();
}
}
}Crystal Reports-(16)
C # Crystal Reports a partir de arquivo .xml
Normalmente, estamos gerando o Crystal Reports a partir de um database, aqui na seção a seguir descreve como criar um Crystal reports apartir de arquivo um XML em C #. Isto é muito semelhante à criação do Crystal Reports a partir de banco de dados, a única diferença é que você tem que selecionar a data source como o arquivo XML no momento da concepção Crystal Report em C #.
A fim de gerar Crystal Report a partir do arquivo XML, nós temos que criar um arquivo XML.Aqui nós vamos criar um arquivo XML e nomeie como product.xml . A estrutura do arquivo product.xml é o mesmo que a tabela Product no banco de dados crystaldb . O conteúdo do product.xml é mostrada abaixo.
Normalmente, estamos gerando o Crystal Reports a partir de um database, aqui na seção a seguir descreve como criar um Crystal reports apartir de arquivo um XML em C #. Isto é muito semelhante à criação do Crystal Reports a partir de banco de dados, a única diferença é que você tem que selecionar a data source como o arquivo XML no momento da concepção Crystal Report em C #.
A fim de gerar Crystal Report a partir do arquivo XML, nós temos que criar um arquivo XML.Aqui nós vamos criar um arquivo XML e nomeie como product.xml . A estrutura do arquivo product.xml é o mesmo que a tabela Product no banco de dados crystaldb . O conteúdo do product.xml é mostrada abaixo.
Gerando Crystal Report do arquivo XML é muito semelhante para a geração de bancos de dados Crystal Report. A única diferença é que quando você selecionar a parte datasource.Aqui você tem que selecionar Create New Connection - Arquivos de Banco de Dados e selecionar o arquivo XML que você deseja gerar o Crystal Reports (Neste caso, você seleciona o product.xml).
Selecione todos os campos do produto e clique no botão FINISH.
inclua os namespaces do exercício anterior e copie e cole o seguinte código :
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load(PUT CRYSTAL REPORT PATH HERE\\CrystalReport1.rpt");
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();
}
}
}Crystal Reports-(15)
Bem vamos nos aprofundar em Dynamic Crystal Reports de C#
Normalmente Crystal Reports é gerado com colunas pré-definidas,Ou seja, os campos mostrados no Crystal Reports estão selecionados através de um assistente na hora do Crystal Report design .
O programa a seguir descreve como gerar um cristal report em C # com dynamic columns no momento da geração de relatórios. Ou seja, não estamos selecionando qualquer coluna da tabela do banco no momento do Crystal Report Design. Em vez de que estamos passando uma consulta SQL string e obter o Crystal Report dinamicamente em tempo de execução em C #. A partir da imagem abaixo você pode entender como ele funciona.
Normalmente Crystal Reports é gerado com colunas pré-definidas,Ou seja, os campos mostrados no Crystal Reports estão selecionados através de um assistente na hora do Crystal Report design .
O programa a seguir descreve como gerar um cristal report em C # com dynamic columns no momento da geração de relatórios. Ou seja, não estamos selecionando qualquer coluna da tabela do banco no momento do Crystal Report Design. Em vez de que estamos passando uma consulta SQL string e obter o Crystal Report dinamicamente em tempo de execução em C #. A partir da imagem abaixo você pode entender como ele funciona.
Strongly Typed Dataset. Aqui estamos limitando em cinco colunas, mas você pode adicionar qualquer número de coluna de acordo com suas necessidades de relatórios.
Próximo passo é criar um projeto de Cristal Reports da Strongly Typed dataset. Você tem que adicionar um Crystal Report em seu projeto e como data source selecione Strongly Typed dataset.
Selecione todas as 5 colunas de Strongly Typed dataset :
Clique no botão Concluir,Então você pode ver os campos selecionados no Crystal Reports .Organize os campos de acordo com seus critérios.
Aqui estamos indo passar as instruções SQL para o Crystal Reports em runtime de C #. Por que temos que analisar a instrução SQL antes de passá-lo para o Crystal Reports. Então nós criamos uma função para analisar instruções SQL no programa C #.
ProcesSQL Função Pública () As String
Você tem que incluir CrystalDecisions.CrystalReports.Engine em seu código-fonte C #.
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Data;
using System.Data.SqlClient ;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
CrystalReport1 objRpt = new CrystalReport1();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cnn ;
string connectionString = null;
string sql = null;
connectionString = "data source=SERVER NAME;initial catalog=crystaldb;user id=USER NAME;password=PASSWORD;";
cnn = new SqlConnection(connectionString);
cnn.Open();
sql = procesSQL();
SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
DataSet1 ds = new DataSet1();
dscmd.Fill(ds, "Product");
objRpt.SetDataSource(ds.Tables[1]);
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh();
}
public string procesSQL()
{
string sql = null;
string inSql = null;
string firstPart = null;
string lastPart = null;
int selectStart = 0;
int fromStart = 0;
string[] fields = null;
string[] sep = { "," };
int i = 0;
TextObject MyText ;
inSql = textBox1.Text;
inSql = inSql.ToUpper();
selectStart = inSql.IndexOf("SELECT");
fromStart = inSql.IndexOf("FROM");
selectStart = selectStart + 6;
firstPart = inSql.Substring(selectStart, (fromStart - selectStart));
lastPart = inSql.Substring(fromStart, inSql.Length - fromStart);
fields = firstPart.Split(',');
firstPart = "";
for (i = 0; i <= fields.Length - 1; i++)
{
if (i > 0)
{
firstPart = firstPart + ", " + fields[i].ToString() + " AS COLUMN" + (i + 1);
firstPart.Trim();
MyText = (TextObject) objRpt.ReportDefinition.ReportObjects[i+1];
MyText.Text = fields[i].ToString();
}
else
{
firstPart = firstPart + fields[i].ToString() + " AS COLUMN" + (i + 1);
firstPart.Trim();
MyText = (TextObject)objRpt.ReportDefinition.ReportObjects[i+1];
MyText.Text = fields[i].ToString();
}
}
sql = "SELECT " + firstPart + " " + lastPart;
return sql;
}
}
}OBS : connectionString = "data source=SERVER NAME;initial catalog=crystaldb;user id=USER NAME;password=PASSWORD;";
Você precisa preencher as informações necessárias para conectar o database através da Connection String.
Crystal Reports-(14)
Como Continuação agora falaremos sobre o assunto C# Crystal Reports da consulta SQL.
gerando uma Strongly Typed DataSet,Aqui estamos gerando um relatório com a tabela Produto. Então, estamos passando o sql abaixo para gerarmos o relatório
sql = "SELECT Product_id,Product_name,Product_price FROM Product";
Crie um novo projeto C # e crie um novo Strongly Typed DataSet de Projeto - Add New Item.
Adicione três colunas na Strongly Typed DataSet :
gerando uma Strongly Typed DataSet,Aqui estamos gerando um relatório com a tabela Produto. Então, estamos passando o sql abaixo para gerarmos o relatório
sql = "SELECT Product_id,Product_name,Product_price FROM Product";
Crie um novo projeto C # e crie um novo Strongly Typed DataSet de Projeto - Add New Item.
Adicione três colunas na Strongly Typed DataSet :
Product_id
Product_name
Product_priceCrie um novo Crystal Report e selecione DataTable como Data Source,você pode selecionar a data table apartir do wizard , Project Data - ADO.NET Dataset - Crystal report Dataset1 - dataset1.depois clique em NEXT.Selecione os campos (product_id, product_name, Product_price) a partir da tela seguinte e clique no botão FINISH.Então você vai ter a tela de designer com os campos selecionados,agora a parte de designer acabou. apartir do código fonte nós podemos passar o código fonte SQL para o crystal reports.
Selecione o formulário padrão (Form1.cs) que você criou em C # e arraste um button e um CrystalReportViewer ao seu formulário.
Você tem que incluir CrystalDecisions.CrystalReports.Engine em seu código-fonte C #.using CrystalDecisions.CrystalReports.Engine;using CrystalDecisions.Shared;
Copie e cole o seguinte código-fonte e executar o seu projeto C #
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Data;
using System.Data.SqlClient;
namespace WindowsApplication1
{
Form1 public partial class: Form
{
public Form1 ()
{
InitializeComponent ();
}
private void Button1_Click (object sender, EventArgs e)
{
SqlConnection cnn;
cadeia connectionString = null;
string sql = null;
connectionString = "data source = SERVERNAME; initial catalog = DatabaseName; id = user username; password = PASSWORD;"
cnn = new SqlConnection (connectionString);
cnn.Open ();
sql = "SELECT product_id, product_name, Product_price FROM Product";
SqlDataAdapter SqlDataAdapter dscmd = new (sql, cnn);
DataSet1 ds = new DataSet1 ();
dscmd.Fill (ds, "Produto");
MessageBox.Show (ds.Tables [1] Rows.Count.ToString ().);
cnn.Close ();
CrystalReport1 objRpt = new CrystalReport1 ();
objRpt.SetDataSource (ds.Tables [1]);
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh ();
}
}
}
OBS : Você tem que fornecer as informações necessárias do database para a Connection String.
terça-feira, 1 de novembro de 2011
Crystal Reports-(13)
Bem agora iremos aprender a usar Crystal reports sem um banco de dados,geralmente usamos um crystal reports para buscar dados de um banco de dados e mostrá-lo como um relatório,para gerar um banco de dados estamos usando aqui o Strongly Typed Dataset e a Data Table de C# .
Gerando Strongly Typed DataSet :
Crie um novo projeto C# e crie um dataset, PROJECT->ADD NEW ITEM->DATASET aceite o nome padrão : Dataset1.xsd.
Criando uma tabela de dados para Dataset1.xsd em C#,Selecione Dataset1.xsd do Solution Explorer e clique direito. Selecione datatable no menu, então você vai ter uma tabela de dados na Dataset. Clique com o direito no datatable e selecione Add->column.
Gerando Strongly Typed DataSet :
Crie um novo projeto C# e crie um dataset, PROJECT->ADD NEW ITEM->DATASET aceite o nome padrão : Dataset1.xsd.
Criando uma tabela de dados para Dataset1.xsd em C#,Selecione Dataset1.xsd do Solution Explorer e clique direito. Selecione datatable no menu, então você vai ter uma tabela de dados na Dataset. Clique com o direito no datatable e selecione Add->column.
Aqui estamos fazendo Crystal Reports de 2 colunas, por isso precisamos de duas colunas na data table. Adicione a coluna ID e a coluna item na data table.
Agora a parte do dataset acabou . Próximo passo é criar um Crystal Reports a partir do dataset que criamos. Selecione um novo Crystal Reports a partir do menu Add New Item e aceite as configurações padrão. A próxima tela é para selecionar a data source apropriada. Lá você pode encontrar o DataTable1 a partir de Project Data->ADO.NET DataSets->DataTable1 e envie DataTable1 para o lado direito.
Clique no botão NEXT e selecione ID e Item da DataTable1 e envie para o lado direito depois clique em FINISH.
Agora a parte de designer acabou, a próxima parte é criar dados para o Crystal Reports, Para isso temos que criar uma Data Table através de programação e adicionar dados ao DataSet1.
Selecione o formulário padrão (Form1.cs) que você criou em C # e arraste um button e um CrystalReportViewer ao seu formulário.
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Data;
namespace WindowsApplication1
{
Form1 public partial class: Form
{
public Form1 ()
{
InitializeComponent ();
}
private void Button1_Click (object sender, EventArgs e)
{
DataSet1 ds = new DataSet1 ();
DataTable t = ds.Tables.Add ("Itens");
t.Columns.Add ("id", Type.GetType ("System.Int32"));
t.Columns.Add ("Item", Type.GetType ("System.String"));
DataRow r;
int i = 0;
for (i = 0; i <= 9; i + +)
{
r = t.NewRow ();
r ["id"] = i;
r ["Item"] = "Item" + i;
t.Rows.Add (r);
}
CrystalReport1 objRpt = new CrystalReport1 ();
objRpt.SetDataSource (ds.Tables [1]);
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh ();
}
}
}.
Crystal Reports-(12)
Bem agora iremos falar sobre E-mail crystal reports a partir de C# application :
Depois de exportar o Crystal Reports como um formato de arquivo PDF em seu disco, o próximo passo é enviar e-mail com esse Arquivo pdf. Aqui estamos usando System.Web.Mail de C #.Nós temos que fornecer as informações necessárias para configurar cliente SmtpMail e enviar o arquivo exportado como anexo.
Selecione o formulário padrão (Form1.cs) que você criou em C # e arraste dois botões (Button1, Button2) e um controle CrystalReportViewer ao seu formulário.Você tem que incluir CrystalDecisions.CrystalReports.Engine em seu código-fonte C #.
Depois de exportar o Crystal Reports como um formato de arquivo PDF em seu disco, o próximo passo é enviar e-mail com esse Arquivo pdf. Aqui estamos usando System.Web.Mail de C #.Nós temos que fornecer as informações necessárias para configurar cliente SmtpMail e enviar o arquivo exportado como anexo.
Selecione o formulário padrão (Form1.cs) que você criou em C # e arraste dois botões (Button1, Button2) e um controle CrystalReportViewer ao seu formulário.Você tem que incluir CrystalDecisions.CrystalReports.Engine em seu código-fonte C #.
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Web.Mail
Copie e cole o seguinte código-fonte e execute o seu projeto C #
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Web.Mail;
namespace WindowsApplication1
{
Form1 public partial class: Form
{
CryRpt ReportDocument;
cadeia PDFfile = "c: \ \ csharp.net-informations.pdf";
public Form1 ()
{
InitializeComponent ();
}
private void Button1_Click (object sender, EventArgs e)
{
cryRpt = new ReportDocument();
cryRpt.Load (coloque o diretório onde você salva o Crystal Report aqui \ \ CrystalReport1.rpt ");
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh ();
}
private void button2_Click (object sender, EventArgs e)
{
try
{
CrExportOptions ExportOptions;
CrDiskFileDestinationOptions DiskFileDestinationOptions DiskFileDestinationOptions = new ();
CrFormatTypeOptions PdfRtfWordFormatOptions PdfRtfWordFormatOptions = new ();
CrDiskFileDestinationOptions.DiskFileName = PDFfile;
CrExportOptions = cryRpt.ExportOptions;
CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
CrExportOptions.ExportFormatType ExportFormatType.PortableDocFormat =;
CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
CrExportOptions.FormatOptions = CrFormatTypeOptions;
cryRpt.Export ();
sendmail ();
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString ());
}
}
sendmail private void ()
{
try {
SmtpMail.SmtpServer.Insert (0 ", o seu hostname");
MailMessage Msg = new MailMessage ();
Msg.To = "para abordar aqui";
Msg.From = "a partir do endereço aqui";
Msg.Subject = "Anexo Crystal Report";
Msg.Body = "Anexo Crystal Report";
Msg.Attachments.Add (MailAttachment novo (PDFfile));
System.Web.Mail.SmtpMail.Send (Msg);
}
catch (Exception ex) {
MessageBox.Show (ex.ToString ());
}
}
}
}Antes de executar este programa, você tem que fornecer as informações necessárias SMTP, que é o seu HOSTNAME, do endereço e para tratar com o cliente SMTP.
Assinar:
Postagens (Atom)