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:
please help me....
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.