Search code examples
c#asp.netcrystal-reports

how to load Crystal Report + Update Panel with session in asp.net 3.5


i 'm working with Crystal Report. here i just want to stay with crystal report if user clicks any navigation link then crystal report with update panel renders with out put.

here is my design code :

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                            <ContentTemplate>
                             <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
                            AutoDataBind="True" EnableDatabaseLogonPrompt="False" 
                            EnableParameterPrompt="False" BackColor="White" Width="350px" />
                           </ContentTemplate>
                              <Triggers>
                                  <asp:AsyncPostBackTrigger ControlID="CrystalReportViewer1" 
                                      EventName="Navigate" />
                              </Triggers>
                            </asp:UpdatePanel>

and here is my page code :

 ReportDocument reportdocument = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Panel_View.Visible = false;
            Session["SessDoc"] = null;
            Session["SearchtText"] = null;
            Session["ColumnName"] = null;
            this.FillGrid((String)Session["ColumnName"] ?? null, (String)Session["SearchtText"] ?? null);
            Bind_DDL_Column_List();
        }
        if (Session["SessDoc"] != null)
        {
            CrystalReportViewer1.ReportSource = (ReportDocument)Session["SessDoc"];
        }
        this.GetData();
    }



  protected void lbut_print_Click(object sender, EventArgs e)
    {
        MPE.Show();
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            int user_id = db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Id).SingleOrDefault();
            var query1 = db.Users.Where(u => u.Id != user_id).OrderByDescending(u => u.Register_datetime).Select(u => new
                         {
                             Id = u.Id,
                             Name = u.First_name + " " + u.Last_name,
                             IsActive = u.IsActive,
                             IsVerified = u.IsVerified,
                             Username = u.Username,
                             password = u.password,
                             Birth_date = u.Birth_date,
                             Anniversary_date = u.Anniversary_date,
                             StatusName = db.Status.Where(s => s.Id.Equals(u.status_id)).Select(s => s.status_name).FirstOrDefault(),
                             GroupName = db.Groups.Where(g => g.Id.Equals(u.group_id)).Select(g => g.Group_name).FirstOrDefault(),
                             Register_datetime = u.Register_datetime
                         }).FilterForColumn((String)Session["ColumnName"] ?? null, (String)Session["SearchtText"] ?? null).ToList();
            DataSet myDataSet = new DataSet();
            DataTable dt = new DataTable("UserReport");
            dt.Columns.Add(new DataColumn("Id", typeof(int)));
            dt.Columns.Add(new DataColumn("Name", typeof(string)));
            dt.Columns.Add(new DataColumn("IsActive", typeof(bool)));
            dt.Columns.Add(new DataColumn("IsVerified", typeof(bool)));
            dt.Columns.Add(new DataColumn("Username", typeof(string)));
            dt.Columns.Add(new DataColumn("password", typeof(string)));
            dt.Columns.Add(new DataColumn("Birth_date", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("Anniversary_date", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("StatusName", typeof(string)));
            dt.Columns.Add(new DataColumn("GroupName", typeof(string)));
            dt.Columns.Add(new DataColumn("Profile_Updated_datetime", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("Register_datetime", typeof(DateTime)));
            foreach (var item in query1)
            {
                if (item != null)
                {
                    DataRow dr = dt.NewRow();
                    dr["Id"] = item.Id.ToString();
                    dr["Name"] = item.Name.ToString();
                    dr["IsActive"] = bool.Parse(item.IsActive.ToString());
                    dr["IsVerified"] = bool.Parse(item.IsVerified.ToString());
                    dr["Username"] = item.Username.ToString();
                    dr["password"] = item.password.ToString();
                    if (item.Birth_date != null)
                    {
                        dr["Birth_date"] = Convert.ToDateTime(item.Birth_date.ToString());
                    }
                    if (item.Anniversary_date != null)
                    {
                        dr["Anniversary_date"] = Convert.ToDateTime(item.Anniversary_date.ToString());
                    }
                    dr["StatusName"] = item.StatusName.ToString();
                    if (item.GroupName != null)
                    {
                        dr["GroupName"] = item.GroupName.ToString();
                    }
                    if (item.Register_datetime != null)
                    {
                        dr["Register_datetime"] = Convert.ToDateTime(item.Register_datetime.ToString());
                    }
                    dt.Rows.Add(dr);
                }
            }
            myDataSet.Tables.Add(dt);
            reportdocument = new ReportDocument();
            SqlConnectionStringBuilder SConn = new SqlConnectionStringBuilder(conString);
            reportdocument.Load(Server.MapPath(@"~/Admin/UserReport.rpt"));
            reportdocument.SetDataSource(myDataSet);
            reportdocument.DataSourceConnections[0].SetConnection(SConn.DataSource, SConn.InitialCatalog, SConn.UserID, SConn.Password);
            Session["SessDoc"] = reportdocument;
            CrystalReportViewer1.ReportSource = (ReportDocument)Session["SessDoc"];
        }
    }

protected void Page_Unload(object sender, EventArgs e)
    {
        if (reportdocument!= null)
        {
            reportdocument.Close();
            reportdocument.Dispose();
        }
        GC.Collect();
    }

how ever this session has not set and error occurs when user clicks any navigation button of crystal report:

enter image description here

please help me....


Solution

  • after commented Page_Unload method it's works and session gets report documnet. but how ever it's necessary that we have to dispose crystal report document object.