[ dr.AgOlO @ 10.12.2006. 17:51 ] @
Pozdrav svima,
imam jedan problem u vezi sa koriscenjem Crystal Reports-a u Visual Studiu 2003. Naime problem nije oko kreiranja izvestaja, jer sam izvestaje napravio u Crystal Reports 10, vec se problem javlja samo posle sledeceg scenarija.

Izvestaje prikazujem u posebnoj formi na kojoj je smestena samo kontrola Crystal Reports Viewer, tako sto u njeno svojstvo DataSource upisujem putanju do izvestaja, a parametre izvestaja postavljam pre svakog poziva i uklanjam ih nakon svakog poziva. Problem nastaje, tj. program puca i prijavljuje Null Pointer Exception kada se neki izvestaj prikaze, ZATIM se uradi njegov export bilo pdf, excel ..., a nakon toga se pokusa prikaz nekog drugog izvestaja. Znaci samo u tom slucaju! Kada nema export-a nema ni pucanja programa i sve perfektno radi! Da li se neko mozda
sretao sa ovim problemom, jer smatram da u samom kodu ne postoje greske, jer da iste postoje program bi pucao i kada se ne bi radio export izvestaja, a sama operacija export-a je ne zavisna od mene :(

Hvala unapred.
Poz.
[ logic_rabbit @ 11.12.2006. 07:03 ] @
Mozda nisi oslobodio report objekat iz memorije?
[ dr.AgOlO @ 11.12.2006. 14:06 ] @
Nisam siguran sta si pod prethodnim mislio, odnosno kapiram ja sta to znaci ali ni jednu posebno metodu za to ne koristim. Ali da bi bilo lakse da shvatite u cemu je problem uradio sam jednostavnu aplikaciju koja poziva neka sva izvestaja i prosledjuje neke parametre ... sve u svemu isti mehanizam sam primenio i u aplikaciji. Znaci da ponovim i ovde kao i u aplikaciji CrystalReportViewer prikazuje "Load Report Failed" nakon pokusaja da se otvori bilo koji izvestaj, a prethodno je uradjen export nekog drugog.

Evo i koda

Code:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using CrystalDecisions.Shared;

namespace Test
{
    public class Form1 : System.Windows.Forms.Form
    {
        ParameterFields parametri;
        ParameterField imeFirme;
        ParameterField adrFirme;
        ParameterField telFirme;
        ParameterField sifraLica;
        ParameterDiscreteValue vrednostParametra;
        private CrystalDecisions.Windows.Forms.CrystalReportViewer crViewer;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            InitializeComponent();
            InicijalizujPodsistemIzvestaja();
        }
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        private void InitializeComponent()
        {
            this.crViewer = new CrystalDecisions.Windows.Forms.CrystalReportViewer();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // crViewer
            // 
            this.crViewer.ActiveViewIndex = -1;
            this.crViewer.Dock = System.Windows.Forms.DockStyle.Top;
            this.crViewer.Location = new System.Drawing.Point(0, 0);
            this.crViewer.Name = "crViewer";
            this.crViewer.ReportSource = null;
            this.crViewer.Size = new System.Drawing.Size(872, 472);
            this.crViewer.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(616, 504);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(120, 24);
            this.button1.TabIndex = 1;
            this.button1.Text = "Lica";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(752, 504);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(112, 24);
            this.button2.TabIndex = 2;
            this.button2.Text = "Pravna lica";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(872, 542);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.crViewer);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }
        private void InicijalizujPodsistemIzvestaja()
        {
            parametri = new ParameterFields();
            imeFirme = new ParameterField();
            adrFirme = new ParameterField();
            telFirme = new ParameterField();

            imeFirme.Name = "p_imeFirme";
            vrednostParametra = new ParameterDiscreteValue();
            vrednostParametra.Value = "Firma";
            imeFirme.CurrentValues.Add(vrednostParametra);
            parametri.Add(imeFirme);

            adrFirme = new ParameterField();
            adrFirme.Name = "p_adrFirme";
            vrednostParametra = new ParameterDiscreteValue();
            vrednostParametra.Value = "Adresa";
            adrFirme.CurrentValues.Add(vrednostParametra);
            parametri.Add(adrFirme);

            telFirme = new ParameterField();
            telFirme.Name = "p_telFirme";
            vrednostParametra = new ParameterDiscreteValue();
            vrednostParametra.Value = "011/000-000";
            telFirme.CurrentValues.Add(vrednostParametra);
            parametri.Add(telFirme);

            sifraLica = new ParameterField();
            sifraLica.Name = "p_sifraLica";
            vrednostParametra = new ParameterDiscreteValue();
            vrednostParametra.Value = 0;
            sifraLica.CurrentValues.Add(vrednostParametra);
            parametri.Add(sifraLica);

            crViewer.ParameterFieldInfo = parametri;
            crViewer.RefreshReport();
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            crViewer.ReportSource = "SpisakL.rpt";
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
            crViewer.ReportSource = "SpisakPL.rpt";
        }
    }
}


Hvala jos jednom.
Poz.
[ dr.AgOlO @ 13.12.2006. 08:09 ] @
Da li je moguce da se niko nije do sad sreo sa ovim problemom ?