sexta-feira, 31 de agosto de 2018

Como exportar Crystal Report para PDF e Excel (código completo)

Vamos aprender, de forma rápida, como exportar um relatório de Crystal Report para os formatos PDF e Excel. Como exemplo vou pegar o projecto que fizemos no post anterior. Clica aqui para ver.

Adicione os botões "Exportar PDF" e "Exportar Excel" no formulário para exportar o relatório.



Para o botão "Exportar PDF" coloque o seguinte código:


private void btnExportToPDF_Click(object sender, EventArgs e)
{
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo PDF|*.pdf";
            string nomeArquivo="";
            if(dialog.ShowDialog()== DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.PortableDocFormat, nomeArquivo);
            }
            
}

Para o botão "Exportar Excel" coloque o seguinte código:

private void btnExportToExcel_Click(object sender, EventArgs e)
{
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo Excel|*.xls";
            string nomeArquivo = "";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.Excel, nomeArquivo);
            }

}

Como podemos ver, para os dois botões, colocamos um SaveFileDialog para o utilizador poder escolher a pasta e o nome do arquivo.



Executa o programa e testa cada botão. Espero te ajudado.

Código completo deste projecto.


public partial class FormPaises : Form
    {
        public FormPaises()
        {
            InitializeComponent();
        }
        Reports.ReportPaises2 cr = new Reports.ReportPaises2();

        private List<Pais> GetListaPaises()
        {
            List<Pais> Paises = new List<Pais>
            {
                new Pais(1, "Angola"),
                new Pais(2, "Brasil"),
                new Pais(3, "Portugal"),
                new Pais(6, "Moçambique"),
                new Pais(7, "Cabo-Verde"),
                new Pais(8, "Namibia")
            };

            return Paises;
        }

        private void FormPaises_Load(object sender, EventArgs e)
        {
            crystalReportViewer1.ReportSource = cr;

            cr.SetDataSource(GetListaPaises());

        }

        private void btnExportToPDF_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo PDF|*.pdf";
            string nomeArquivo="";
            if(dialog.ShowDialog()== DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.PortableDocFormat, nomeArquivo);
            }
         

        }

        private void btnExportToExcel_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo Excel|*.xls";
            string nomeArquivo = "";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.Excel, nomeArquivo);
            }


        }
    }

Como criar um relatório CrystalReport sem banco de dados


A um tempo tive problemas com as conexões do crystal report. Quando passava a aplicação para outros computadores tinha que trocar também a conexão, porem muitas vezes esquecia de fazer esse processo e ficava horas e horas para descobrir onde estava o problema. Por isso optei por usar os crystal report sem conexão directa a base de dados.

O que vamos ver é pequeno exemplo de como criar um relatório de Lista de Países com o Crystal Reports a partir de uma lista de objectos sem ter uma banco de dados.


Passo 1

Certifique-se de ter Crystal Report para o Visual Studio instalado.

Passo 2

Cria um novo projecto WinForm. Neste exemplo criei um projecto com nome TesteCrystalSemDB. A seguir, cria uma classe País como o seguinte:

public class Pais
    {
        public Pais(int codigo,string nome)
        {
            this.Codigo = codigo;
            this.NomePais = nome;
        }
        public int Codigo { get; set; }
        public string NomePais { get; set; }
    }

Passo 3


Adicione um novo formulário com o nome FormPaises, e adicione o seguinte método:

        private List<Pais> GetListaPaises()
        {
            List<Pais> Paises = new List<Pais>
            {
                new Pais(1, "Angola"),
                new Pais(2, "Brasil"),
                new Pais(3, "Portugal"),
                new Pais(6, "Moçambique"),
                new Pais(7, "Cabo-Verde"),
                new Pais(8, "Namibia")
            };

            return Paises;
        }

Passo 4

Adicione um DataSet. Nomeia-o por DataSet1 como na figura abaixo:



Dentro da DataSet adicione uma DataTable com o nome de Pais, e cria as colunas com os mesmos nome dos atributos da classe Pais. ( Esse é o maior segredo ;). Confirma na figura acima.

Passo 5


Adicione ao projecto um Crystal Report e nomeio-o por ReportPaises2, clique em Add.

 Aparecerá uma caixa como a que se segui, as  opeções criar um nome documento de crystal report, escolha a segunda, Relatório em Branco e clica OK.

Passo 6

Restamos definir a fonte de dados ou DataSet no nosso Crystal Report. Para isso, vai em Fiel Explorer dê um clique direito na Database Fiel para selecionar o opção Database Expert conforme a figura abaixo mostra:


No assistente, expande Dados de Projecto > Conjuntos de Dados ADO.NET > TesteCrystalSemDB.DataSet1e seleccione a DataTable Pais.


 Modele a aparência do relatório, e adicione os campos que deseja ao relatório, confirme na figura:

Passo 7


Volte para o formulário FormPaises, vai à ToolBox, escolha o CrystalReportViewer, coloque-o ao formulário e nomeia-o por crystalReportViewer1.

Selecione este novo componente e (1) no seu canto superior direito dê um clique para ver a lista de propriedades, (2) clique em "Escolher um Crystal Report, (3) Selecione o relatorio que criamos "ReportPaises2", (4) clique em OK.
 No evento Load do formulário cole o seguinte código:

private void FormPaises_Load(object sender, EventArgs e)
{
            Reports.ReportPaises2 cr = new Reports.ReportPaises2();
            crystalReportViewer1.ReportSource = cr;

            cr.SetDataSource(GetListaPaises());

}

Pronto, o relatório está feito, basta pressionar F5 para testar.


Bonus

A propriedade SetDataSource do CrystalReport pode receber qualquer colecção de dados. Por isso aproveita essa propriedade colocar a tua fonte da dados. Como eu disse no inicio deste post, não acho viável os dados serem dependentes da conexão do Crystal Report.

Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas