none
Relatório do Crystal Reports a partir de uma classe objeto??? Sem banco de dados!

    Question

  • Tenho a classe - Dados:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Windows.Forms;

    namespace Crive

    {

    public class Dados

    {

    private IniFile ini;

    public string nome;

    public string numCliente;

    public string numEncomenda;

     

    public Dados()

    {

    }

     

    public void carregaDados(string arquivo)

    {

    this.ini = new IniFile(Application.StartupPath + "\\Relatorios\\" + arquivo);

    this.nome = ini.IniReadValue("Customer", "Firstname");

    this.numCliente = ini.IniReadValue("Customer", "CustNr");

    this.numEncomenda = ini.IniReadValue("Order", "Nr");

     

    }

    }

    }

     

    Classe Principal

     

    namespace Crive

    {

    public partial class FormPrincipal : DevComponents.DotNetBar.Office2007Form

    {

    private Dados dados;

    private FormRelPadrao fmRelPadrao = FormRelPadrao.getRel(); // é o form do Relatório, nada d+

    public FormPrincipal()

    {

    InitializeComponent();

    this.carregaDataGridView();

    dados = new Dados();

    }

     

    private void imprimirRelatorio()

    {

    // instanciar o relatório...

    crCrive relatorio = new crCrive();

     

    // Agora, vamos instanciar o form que vai exibir o relatório

    // e lhe apontar relatório que ele deve exibir.

    this.fmRelPadrao.parametrosRel(relatorio);

    this.fmRelPadrao.Text = "Visualizar CRIVE - Relatórios";

    try

    {

    this.fmRelPadrao.ShowDialog();

    }

    finally

    {

    relatorio = null;

    // this.fmRelPadrao = null;

    }

    }

    }

    }

     

    Tenho o relatório: crCrive.rpt

    na qual joguei os campos: nome, numCliente, numEncomenda da "classe Dados"; dentro do "Database Fields"

    Crive_Dados

    fui jogando cada campo na tela de relatório: numCliente, etc

     

    na hora de rodar não apareceu os dados da  classe Dados no Relatório

    o que pode ter acontecido???

    Tuesday, July 01, 2008 9:16 PM

All replies

  • José,

     

    Algumas dicas para construir um relatório com CrystalReports:

     

    1 - Crystal Reports do VS2005, usando uma Generic Collection como fonte de dados

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=3256996&SiteID=21

     

    2 - No link em anexo, vc encontra 2 vídeos sobre a construção de relatórios com CrystalReports e ReportView, ambos utilizando DataSet para fazer o designer dos relatórios. Inclusive mostro em detalhes como trabalhar de forma correta utilizando DataSets.

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3271109&SiteID=21

     

    3 - Um exemplo em C#

    Code Snippet

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

     

    //referências do banco de dados

    using System.Data.SqlClient;

    using System.Data;

     

    //referências do crystal reports

    using CrystalDecisions.CrystalReports.Engine;

    using CrystalDecisions.Shared;

    using CrystalDecisions.Windows;

     

    //referências app.config

    using System.Configuration;

     

    private void ListaProdutos()

    {

    ReportDocument crReportDocument = new ReportDocument();

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

    SqlConnection oConn = new SqlConnection();

    StringBuilder strSQL = new StringBuilder();

    DataTable oTable = new DataTable();

    try

    {

    //1 passo: carregar o relatório

    string strPathreport = String.Concat(Application.StartupPath.ToString(), "\\CrystalReports\\rptProdutos.rpt");

    strPathreport = strPathreport.Replace("bin\\Debug\\", "");

    crReportDocument.Load(strPathreport);

    //configurando para impressão em Landscape

    //crReportDocument.PrintOptions.PaperOrientation = PaperOrientation.Landscape

    //2 passo: passar os dados para o relatório (datatable)

    //abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao;

    oConn.Open();

    //carregando os dados

    strSQL.Append(" SELECT ");

    strSQL.Append(" Production.Product.ProductID, ");

    strSQL.Append(" Production.Product.Name, ");

    strSQL.Append(" Production.Product.Color, ");

    strSQL.Append(" Production.Product.ListPrice, ");

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ");

    strSQL.Append(" FROM ");

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ");

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ");

    SqlDataAdapter oDA = new SqlDataAdapter(strSQL.ToString(), oConn);

    oDA.Fill(oTable);

    //definindo o DataSource do relatório

    crReportDocument.SetDataSource(oTable);

    //visualizando o relatório crPrintPreview: CrystalReportViewer

    crPrintPreview.DisplayGroupTree = false;

    //crPrintPreview.HasCrystalLogo = false;

    crPrintPreview.ReportSource = crReportDocument;

    }

    catch (Exception ex)

    {

    System.Diagnostics.Debug.WriteLine(ex.Message);

    }

    finally

    {

    //liberando os objetos

    oConn.Dispose();

    oTable.Dispose();

    oConn = null;

    oTable = null;

    }

    }

    private void crPrintPreview_Load(object sender, EventArgs e)

    {

    }

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    Wednesday, July 02, 2008 12:41 AM
  • Muito obrigado amigo pela ajuda

    porém, eu não pego os dados do "banco de dados" e sim de uma classe que faz referência a um arquivo "ini"

    e não tenho dataSet

    queria preencher apenas através da classe, sem a necessidade de jogar num data set, é possível?

    resumindo: preencher o relatório sem utilizar banco de dados

    como eu faria isso?

    pois só vejo exemplos com banco de dados...

    Wednesday, July 02, 2008 2:11 AM
  • José,

     

    Então, no primeiro link que eu passei eu mostro um exemplo com uma classe do tipo Generics.

     

    1 - Crystal Reports do VS2005, usando uma Generic Collection como fonte de dados

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=3256996&SiteID=21

     

    DataSet: Utilizar um item do tipo DataSet não significa que vc está fazendo uma conexão com o banco de dados. Um DataSet na verdade é um arquivo .XML (inclusive é possível montar esse XML no notepad e adicionar ao projeto.

     

    A grande "jogada" para trabalhar com relatórios no .NET de forma desconectada é utilizando a estrutura do DataSet para criar o designer do relatório, ou sejá os campos que serão exibidos no relatório.

     

    Isso resolver o designer, agora para passar os dados, vc pode inclusive criar um DataTable com a mesma estrutura da sua classe e passar o objeto para o relatório. Esse exemplo também consta no link que eu passei.

     

     

    Espero ter ajudado.

     

     

     

     

     

    Wednesday, July 02, 2008 1:01 PM