Crystal Reports Viewer ne passera pas la page 2

j'ai un contrôle de visionneuse Crystal Report sur une page aspx, qui est censée avoir intégré un pageur.

quand je clique sur le bouton" Page suivante "la première fois, je passe de la page 1 à la page 2, mais une fois sur deux je clique sur" page suivante " le rapport se recharge à la page 2.

15
demandé sur Ryan 2009-08-27 23:15:01

10 réponses

le problème peut provenir de la configuration de la commandeReportSource lors de la Page_Load événement. Cela fait que les informations de paging sont sur-écrites avec chaque chargement de page, de sorte que la "page courante" est re-définie à 1 alors qu'elle devrait être à 2.

comme solution facile, vous pouvez déplacer le code qui définit ReportSource en Page_Init

24
répondu Ryan 2009-08-27 19:17:18

ajouter manuellement L'événement Page_Init() et le transférer dans InitializeCompnent() avec

this.Init += new System.EventHandler(this.Page_Init).

Déplacer le contenu de Page_LoadPage_Init().

Ajouter if (!IsPostBack) condition in Pageeinit.

protected void Page_Init(object sender, EventArgs e) {

    if (!IsPostBack)
    {
         ReportDocument crystalReportDocument = new ReportDocumment();
         crystalReportDocument.SetDataSource(DataTableHere);
         _reportViewer.ReportSource = crystalReportDocument;
         Session["ReportDocument"] = crystalReportDocument;
    }
    else
    {
          ReportDocument doc = (ReportDocument)Session["ReportDocument"];
          _reportViewer.ReportSource = doc;
    }
}
5
répondu Spider man 2014-03-04 11:18:50
if (!Page.IsPostBack)
{
  //Write your Report display code 

  crystalRep.Load(Server.MapPath("DueFD.rpt"));
  crystalRep.SetDatabaseLogon(DB_UId, DB_Pass, Serv_Name, DB_Name);
  CrystalReportViewer1.ReportSource = crystalRep;

  // session code
  ReportDocument doc = (ReportDocument)Session["ReportDocument"];
  CrystalReportViewer1.ReportSource = doc;
}
else
{
  ReportDocument doc = (ReportDocument)Session["ReportDocument"];
  CrystalReportViewer1.ReportSource = doc;
}
4
répondu Harshal 2012-10-26 13:27:14

Mettre la Source de la déclaration Page_Init au lieu de Page_Load Et les paramètres de rapport Page_Load Je pense qu'il fonctionne Probablement

1
répondu Khaled Eltabei 2016-03-04 20:00:16

ça marche pour moi!!

ReportDocument rd = new ReportDocument();

        protected void Page_Load(object sender, EventArgs e)
        {           
            string rptpath = WebConfigurationManager.AppSettings["ReportPath"].Replace("{TID}", Convert.ToString(Session["TID"]));
            rd.Load(rptpath);

            DataTable dtable = TemplateModel.LoadChequeData(Convert.ToString(Session["CID"]));
            rd.SetDataSource(dtable);           
        }

        protected void Page_Init(object sender, EventArgs e)
        {
            CrystalReportViewer1.ReportSource = rd;
        }
1
répondu Karthick Jayaraman 2016-05-21 14:20:11

j'ai déjà eu ce problème sur visual studio 2008, installation de crystal reports basic service pack 1 résolu le problème

0
répondu lausite 2009-12-02 19:19:03

j'ai eu ce problème aussi, Vérifiez s'il n'y a pas un autre WebControl interférant avec Crystal (problème de rappel ? JavaScript ? Je ne suis pas sûr). Dans mon cas précis, le téléchargement de fichier Dart et Crystal ne se sont pas bien entendus lorsqu'ils ont été mis dans la même page.

0
répondu eternal 2010-09-03 09:16:02

j'ai mis tous les rapports de chargement dans Page_Init au lieu de Page_Load. Et Il fonctionne correctement.

0
répondu Anh Nguyen 2014-09-03 08:05:13

j'ai une certaine approche de l'action. J'ai mis au point l'emballage CR simple qui peut aider à rendre des rapports Crystal. Utilisez ce code tel quel. S'il vous plaît n'hésitez pas à modifier, étendre n'importe quelle partie du code. Lien de téléchargement https://1drv.ms/u/s!AlTLBrnU_bLUiaoUxcxNiRCZRQjWng

et l'échantillon Comment utiliser l'enrubanneuse en utilisant la classe d'enrubanneuse CR qui enter code here implémente l'interface IDisposable. Définir la source du rapport dans Page_Init et les paramètres du rapport dans les événements Page_Load et le rapport d'élimination document dans L'événement Page_Unload.

La seconde méthode utilise la classe statique et rend le rapport à uns, en éliminant le document de rapport à la fin. La source du rapport doit être sauvegardée dans la variable session. S'il vous plaît être conscient que la deuxième méthode n'est pas vraiment approprié dans l'application web de trafic élevé, parce que l'utilisation de la classe statique. La collision se produira si deux utilisateurs exécutent des rapports en même temps.

Méthode 1

using System;
using System.Linq;
using CrystalDecisions.Shared;
using System.Configuration;
using System.Web.Configuration;
using WebReports.Models.Helpers.CrystalReports; //Reference to CR wrapper


namespace YourNamespace
{
    public partial class ReportForm : System.Web.UI.Page
    {

        protected string _serverName;
        protected string _databaseName;
        protected string _schemaName;
        protected string _userId;
        protected string _userPassword;
        protected bool _integratedSecurity;
        protected string _databaseType;
        //Wrapper Report Document
        protected CReportDocument _reportDocument;

        /// <summary>
        /// Load report
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Init(object sender, EventArgs e)
        {
            //Wrapper object
            this._reportDocument = new CReportDocument();

            //These settings should be initialized from i.e. web.config in Page_PreInit

            this._reportDocument.ServerName = this._serverName;
            this._reportDocument.DatabaseName = String.Empty;
            this._reportDocument.SchemaName = this._schemaName;
            this._reportDocument.DatabaseType = CReportDatabaseType.ORACLE;
            this._reportDocument.UserId = this._userId;
            this._reportDocument.UserPassword = this._userPassword;
            this._reportDocument.IntegratedSecurity = false;


            //Get report name from query string. Define Your own method to get report name
            var parReportName = Request.QueryString["reportname"];

            if (String.IsNullOrEmpty(parReportName))
            {
                lblConfigError.Text = "Crystal Report name is not being provided.";
                return;
            }

            //Set Report file
            this._reportDocument.ReportFile = Server.MapPath("~/ReportFiles/") + parReportName;
            //Set Report documant
            this._reportDocument.SetReportDocument();
            //Get Report Document
            crViewer.ReportSource = this._reportDocument.GetReportDocument();

        }

        protected void Page_Load(object sender, EventArgs e)
        {

            CReportParameter reportParameter;

            //Get parameters Your own method to provide report parameters
            var parFimYear = RouteData.Values["par1"];
            var parFimCityCode = RouteData.Values["par2"];

            if (par1 == null || par2 == null)
            {
                lblConfigError.Text = "Crystal Report parameters are not being provided.";
                return;
            }

            //Define Report Parameter
            reportParameter = new CReportParameter();
            reportParameter.ParameterName = "@parYear";
            reportParameter.ParameterValue = parFimYear;
            reportParameter.crParameterValueKind = ParameterValueKind.StringParameter;
            _reportDocument.AddCReportParameter(reportParameter);

            reportParameter = new CReportParameter();
            reportParameter.ParameterName = "@parCityCode";
            reportParameter.ParameterValue = parFimCityCode;
            reportParameter.crParameterValueKind = ParameterValueKind.StringParameter;
            _reportDocument.AddCReportParameter(reportParameter);

            //Set report parameters
            this._reportDocument.SetReportParameters();

        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            this._reportDocument.Dispose();
        }

    }
}

Méthode 2

using System;
using System.Linq;
using CrystalDecisions.Shared;
using System.Configuration;
using System.Web.Configuration;
using CrystalDecisions.CrystalReports.Engine;
using WebReports.Models.Helpers.CrystalReports; //Reference to CR wrapper

namespace YourNamespace
{
    public partial class ReportForm : System.Web.UI.Page
    {

        protected string _serverName;
        protected string _databaseName;
        protected string _schemaName;
        protected string _userId;
        protected string _userPassword;
        protected bool _integratedSecurity;
        protected string _databaseType;

        /// <summary>
        /// Load report
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Init(object sender, EventArgs e)
        {
            CReportParameter reportParameter;

            //These settings should be initialized from i.e. web.config in Page_PreInit

            if (!IsPostBack)
            {
                if (this._databaseType == CReportDatabaseType.ORACLE.ToString())
                {
                    //static wrapper class
                    CReportDocumentManager.ServerName = this._serverName;
                    CReportDocumentManager.DatabaseName = String.Empty;
                    CReportDocumentManager.SchemaName = this._schemaName;
                    CReportDocumentManager.DatabaseType = CReportDatabaseType.ORACLE;
                    CReportDocumentManager.UserId = this._userId;
                    CReportDocumentManager.UserPassword = this._userPassword;
                    CReportDocumentManager.IntegratedSecurity = false;

                    //Get report name from query string. Define Your own method to get report name
                    var parReportName = Request.QueryString["reportname"];

                    if (String.IsNullOrEmpty(parReportName))
                    {
                        lblConfigError.Text = "Crystal Report name is not being provided.";
                        return;
                    }
                        //get par1. Your own method to provide report parameters. This is from MVC application
                        var par1 = RouteData.Values["par1"];
                        //get par2
                        var par2 = RouteData.Values["par2"];

                        if (par1 == null || par2 == null)
                        {
                            lblConfigError.Text = "Crystal Report parameters are not being provided.";
                            return;
                        }

                        reportParameter = new CReportParameter();
                        reportParameter.ParameterName = "@parYear";
                        reportParameter.ParameterValue = par1;
                        reportParameter.CReportParameterValueKind = ParameterValueKind.StringParameter;
                        CReportDocumentManager.AddCReportParameter(reportParameter);

                        reportParameter = new CReportParameter();
                        reportParameter.ParameterName = "@parCityCode";
                        reportParameter.ParameterValue = par2;
                        reportParameter.CReportParameterValueKind = ParameterValueKind.StringParameter;
                        CReportDocumentManager.AddCReportParameter(reportParameter);



                    CReportDocumentManager.ReportFile = Server.MapPath("~/ReportFiles/") + parReportName;
                    ReportDocument doc = CReportDocumentManager.GetCReportDocument();
                    crViewer.ReportSource = doc;
                    Session[parReportName] = doc;

                }
            }
            else
            {
                var parReportName = Request.QueryString["reportname"];
                ReportDocument doc = (ReportDocument)Session[parReportName];
                crViewer.ReportSource = doc;

            }                
        }

    }
}
0
répondu Serghei T 2016-10-04 16:45:42

pour moi cela a bien fonctionné jusqu'à ce que je passe de 13.0.1 à 13.0.10, donc clairement quelque chose a changé.

j'ai essayé la solution ci-dessus mais c'est compliqué par le fait que nous postons de nouveau pour mettre à jour les paramètres du rapport, et si vous ne définissez pas les paramètres du rapport sur le chargement de la page, le rafraîchissement échoue. Donc à partir d'aujourd'hui je ne l'ai pas fait fonctionner sans avoir quelque chose dans la charge de page.

je pense que je pourrais avoir à ajouter de la logique pour vérifier les valeurs param changées et seulement actualiser le rapport si l'on a changé.

à la fin j'ai supprimé notre page "barre latérale" des liens haut/bas et j'ai utilisé ceux du visualiseur. Je ne pouvais voir aucune façon, étant donné les crochets de page disponibles pour le faire fonctionner - Paramétrer les paramètres du rapport réinitialise le paging, mais ne pas les paramétrer signifie que la page ne se chargera pas.

0
répondu Paul Nicklin 2018-06-19 13:41:35