2010-03-03 4 views
2

J'ai une page asp.net (2.0) avec un visualiseur de rapport de cristal. J'utilise le code suivant dans la méthode Page_Load()Problème de CrystalReportViewer avec la navigation entre les pages

if (!Page.IsPostBack) 
    { 
     Session["REP"] = null; 
    } 
    ReportDocument report; 
    if (Session["REP"] == null) 
    { 
     report = new ReportDocument(); 
     report.Load(Server.MapPath("reports\\rptListItems.rpt")); 
     report.SetDatabaseLogon(Session["DB_USER"].ToString(), 
           Session["DB_PWD"].ToString(), 
           Session["DB_ODBC"].ToString(), "DBNAME"); 
     Session["REP"] = report; 
    } 
    else 
    { 
     report = (ReportDocument)Session["REP"]; 
    } 
    rptItems.ReportSource = report; 

Lorsque j'appuie sur le bouton « page suivante » sur la barre d'outils du visualiseur de rapports de cristal, il va à la page 2 comme il se doit et après qu'il reste juste là même si j'appuie sur le bouton suivant à nouveau. J'ai essayé d'ajouter par programmation un bouton qui a fait un .ShowNextPage mais qui a montré le même comportement. Quelle peut être la raison?

Dans le cas où il aide, mon contrôle de visionneuse de rapports de cristal est déclaré comme ci-dessous

<CR:CrystalReportViewer ID="rptItems" runat="server" AutoDataBind="true" 
      EnableDatabaseLogonPrompt="False" 
      EnableParameterPrompt="False" Height="50px" 
      ReuseParameterValuesOnRefresh="True" Width="800px" 
      DisplayGroupTree="False" 
      HasCrystalLogo="False" /> 

Répondre

0

j'ai trouvé la solution dans d'autres pages et ... ça marche! Comment? Placez le code dans la méthode page_init(). Cette méthode conserve les valeurs lors de la navigation sans la condition isPostBack.

Bonne chance

1
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["UID"].ToString() == "0" || Session["UID"].ToString() == "" && Session["CID"].ToString() == "0" || Session["CID"].ToString() == "") 
    { 
     Response.Redirect("Login.aspx"); 
    } 
    else 
     Response.Cache.SetExpires(DateTime.Now.AddDays(-1)); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    if (IsPostBack) 
    { 
     lblStatus.Text = ""; 
     function(); 
    } 
} 
protected void Page_UnLoad(object sender, EventArgs e) 
{ 
    ReportDocument crystalReport = new ReportDocument(); 
    this.CrystalReportViewer1.Dispose(); 
    this.CrystalReportViewer1 = null; 
    crystalReport.Close(); 
    crystalReport.Dispose(); 
    GC.Collect(); 
} 
Questions connexes