导航下一页时在 Crystal 报告中获取 "Database Logon Error"
Getting "Database Logon Error" in Crystal Report While Navigating Next Page
我在 ASP.NET 和 C#(数据集)中为 Crystal 报告开发了以下代码,
我在报告中有多个页面,我正确地获得了第一页,但是在导航下一页时我遇到了登录错误。
public partial class WSDayBookReport : System.Web.UI.Page
{
SQLClass sqlfunc = new SQLClass();
DayBookDataSet dset = new DayBookDataSet();
ReportDocument rdoc;
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Unload(object sender, EventArgs e)
{
try
{
rdoc.Close();
rdoc.Dispose();
rdoc = null;
}
catch (Exception ex)
{
}
}
public void OpeningStock()
{
string qry = "select i.ItemGroupID, ig.ItemGroupCode As ItemGroupCode, Sum(iss.RegularStock) As OpeningStock from ItemStock iss, Item i, ItemGroup ig where ig.ItemGroupID = i.ItemGroupID AND iss.ItemID = i.ItemId group by i.ItemGroupID,ig.ItemGroupCode";
sqlfunc.GetDataFromDT(dset.ItemGroupStock, qry, "sqlcon");
var q1 = from igs in dset.ItemGroupStock.AsEnumerable()
select igs;
foreach (var res in q1)
{
res.ConsumedStock = 0;
res.ClosingStock = 0;
}
dset.AcceptChanges();
//Response.Write(dset.ItemGroupStock.Rows.Count.ToString() + "=Opening Stock");
}
public void loadUser()
{
string qry = "select pp.PersonnelParticularID As UserID, pp.PersonnelName As UserName from WineOrder wo, WineOrderDetail wod, PersonnelParticular pp, ItemGroup ig, Item i where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate ='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by pp.PersonnelParticularID,pp.PersonnelName";
sqlfunc.GetDataFromDT(dset.UserMaster, qry, "sqlcon");
qry = "select pp.PersonnelParticularID As UserID,ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i, PersonnelParticular pp where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID, pp.PersonnelParticularID";
sqlfunc.GetDataFromDT(dset.UserConsume, qry, "sqlcon");
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
dset = new DayBookDataSet();
OpeningStock();
loadUser();
//Deducting new RU Entry after the entered date...
DataTable dtTemp = new DataTable();
string qry2 = "select Sum(rs.Quantity) As Qty,i.ItemGroupID from RegularStock rs, Item i where i.ItemID = rs.ItemID AND rs.RSDate>='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' Group by i.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry2, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][1].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock -= Convert.ToDecimal(dtTemp.Rows[i][0].ToString());
}
}
}
//Adding cosumed stock from the entered date.
dtTemp = new DataTable();
string qry = "select ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i where ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wo.IssuedToPersonnelID is not null AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate>='10-01-2015' group by ig.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][0].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock += Convert.ToDecimal(dtTemp.Rows[i][1].ToString());
}
}
}
dset.AcceptChanges();
var qry10 = from us in dset.UserConsume.AsEnumerable()
group us by us.ItemGroupID into g
select new
{
TOTAL = g.Sum(x => x.ConsumptionQty),
IG = g.Key
};
foreach (var res in qry10)
{
//Response.Write(res.IG.ToString() +"-"+res.TOTAL.ToString()+ "----------");
var qrry = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == res.IG
select igs;
foreach (var res2 in qrry)
{
res2.ClosingStock = res2.OpeningStock - res.TOTAL;
}
}
rdoc = new ReportDocument();
rdoc.Load(Server.MapPath("~/Report/WSDayBookRpt.rpt"));
rdoc.SetDataSource(dset);
CrystalReportViewer1.DataBind();
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
}
}
请帮帮我..
我曾尝试使用会话,但我无法在第二页之后导航,如果我使用写页码进行导航,它会正常工作...
谢谢和问候,
更新
public partial class WSDayBookReport : System.Web.UI.Page
{
SQLClass sqlfunc = new SQLClass();
ReportDocument rdoc = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (Session["CRpt"] != null)
{
rdoc =(ReportDocument) Session["CRpt"];
}
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
}
else
{
// 'NOT POSTBACK
}
}
protected void Page_Unload(object sender, EventArgs e)
{
if (Session["CRpt"] != null)
{
Session.Remove("CRpt");
}
Session["CRpt"]=rdoc;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
DayBookDataSet dset = new DayBookDataSet();
//OpeningStock();
string qry = "select i.ItemGroupID, ig.ItemGroupCode As ItemGroupCode, Sum(iss.RegularStock) As OpeningStock from ItemStock iss, Item i, ItemGroup ig where ig.ItemGroupID = i.ItemGroupID AND iss.ItemID = i.ItemId group by i.ItemGroupID,ig.ItemGroupCode";
sqlfunc.GetDataFromDT(dset.ItemGroupStock, qry, "sqlcon");
var q1 = from igs in dset.ItemGroupStock.AsEnumerable()
select igs;
foreach (var res in q1)
{
res.ConsumedStock = 0;
res.ClosingStock = 0;
}
// loadUser();
qry = "select pp.PersonnelParticularID As UserID, pp.PersonnelName As UserName from WineOrder wo, WineOrderDetail wod, PersonnelParticular pp, ItemGroup ig, Item i where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by pp.PersonnelParticularID,pp.PersonnelName";
sqlfunc.GetDataFromDT(dset.UserMaster, qry, "sqlcon");
if (dset.UserMaster.Rows.Count == 0)
{
lblStatus.Text = "No Consumption on selected date.";
CrystalReportViewer1.ReportSource = null;
if (Session["ssnRdoc"] != null)
{
Session.Remove("ssnRdoc");
}
return;
}
else
{
lblStatus.Text = "";
}
//user consumption
qry = "select pp.PersonnelParticularID As UserID,ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i, PersonnelParticular pp where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID, pp.PersonnelParticularID";
sqlfunc.GetDataFromDT(dset.UserConsume, qry, "sqlcon");
dset.AcceptChanges();
ViewState.Add("vsDset", dset);
//Deducting new RU Entry after the entered date...
DataTable dtTemp = new DataTable();
string qry2 = "select Sum(rs.Quantity) As Qty,i.ItemGroupID from RegularStock rs, Item i where i.ItemID = rs.ItemID AND rs.RSDate>='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' Group by i.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry2, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][1].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock -= Convert.ToDecimal(dtTemp.Rows[i][0].ToString());
}
}
}
//Adding cosumed stock from the entered date.
dtTemp = new DataTable();
qry = "select ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i where ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wo.IssuedToPersonnelID is not null AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate>='" + Convert.ToDateTime(txtDate.Text.Trim()).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][0].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock += Convert.ToDecimal(dtTemp.Rows[i][1].ToString());
}
}
}
dset.AcceptChanges();
var qry10 = from us in dset.UserConsume.AsEnumerable()
group us by us.ItemGroupID into g
select new
{
TOTAL = g.Sum(x => x.ConsumptionQty),
IG = g.Key
};
foreach (var res in qry10)
{
var qrry = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == res.IG
select igs;
foreach (var res2 in qrry)
{
res2.ClosingStock = res2.OpeningStock - res.TOTAL;
}
}
ViewState.Add("vsDset", dset);
rdoc.Load(Server.MapPath("~/Report/WSDayBookRpt.rpt"));
rdoc.SetDataSource(dset);
CrystalReportViewer1.DataBind();
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
Session["CRpt"]= rdoc;
}
}
您的 CrystalReportViewer 控件可能丢失了 PostBack 上的 ReportDocument。您必须按照以下方式进行操作:
在页面级别声明您的 ReportDocument 对象
ReportDocument rdoc = new ReportDocument();
在 Page_Load 事件中从 Session 对象加载 ReportDocument
protected void Page_Load(System.Object sender, System.EventArgs e) {
if (Page.IsPostBack) {
if (Session.Item("CRpt") != null) {
rdoc = Session.Item("CRpt");
}
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
} else {
'NOT POSTBACK
if (Session.Item("CRpt") != null) {
Session.Remove("CRpt");
}
Session.Add("CRpt", rdoc);
}
}
在 btnSubmit 上创建 ReportDocument 并将其添加到 Session
protected void btnSubmit_Click(object sender, EventArgs e) {
//Populate Report
rdoc.SetDataSource(dset);
CrystalReportViewer1.ReportSource = rdoc;
Session.Add("CRpt", rdoc);
}
除此之外,如果您在设置 LogOnInfo 方面需要特定帮助,那么您也可以查看此 SO post Report asking for database login on setting DataTable as DataSource
我在 ASP.NET 和 C#(数据集)中为 Crystal 报告开发了以下代码, 我在报告中有多个页面,我正确地获得了第一页,但是在导航下一页时我遇到了登录错误。
public partial class WSDayBookReport : System.Web.UI.Page
{
SQLClass sqlfunc = new SQLClass();
DayBookDataSet dset = new DayBookDataSet();
ReportDocument rdoc;
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Unload(object sender, EventArgs e)
{
try
{
rdoc.Close();
rdoc.Dispose();
rdoc = null;
}
catch (Exception ex)
{
}
}
public void OpeningStock()
{
string qry = "select i.ItemGroupID, ig.ItemGroupCode As ItemGroupCode, Sum(iss.RegularStock) As OpeningStock from ItemStock iss, Item i, ItemGroup ig where ig.ItemGroupID = i.ItemGroupID AND iss.ItemID = i.ItemId group by i.ItemGroupID,ig.ItemGroupCode";
sqlfunc.GetDataFromDT(dset.ItemGroupStock, qry, "sqlcon");
var q1 = from igs in dset.ItemGroupStock.AsEnumerable()
select igs;
foreach (var res in q1)
{
res.ConsumedStock = 0;
res.ClosingStock = 0;
}
dset.AcceptChanges();
//Response.Write(dset.ItemGroupStock.Rows.Count.ToString() + "=Opening Stock");
}
public void loadUser()
{
string qry = "select pp.PersonnelParticularID As UserID, pp.PersonnelName As UserName from WineOrder wo, WineOrderDetail wod, PersonnelParticular pp, ItemGroup ig, Item i where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate ='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by pp.PersonnelParticularID,pp.PersonnelName";
sqlfunc.GetDataFromDT(dset.UserMaster, qry, "sqlcon");
qry = "select pp.PersonnelParticularID As UserID,ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i, PersonnelParticular pp where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID, pp.PersonnelParticularID";
sqlfunc.GetDataFromDT(dset.UserConsume, qry, "sqlcon");
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
dset = new DayBookDataSet();
OpeningStock();
loadUser();
//Deducting new RU Entry after the entered date...
DataTable dtTemp = new DataTable();
string qry2 = "select Sum(rs.Quantity) As Qty,i.ItemGroupID from RegularStock rs, Item i where i.ItemID = rs.ItemID AND rs.RSDate>='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' Group by i.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry2, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][1].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock -= Convert.ToDecimal(dtTemp.Rows[i][0].ToString());
}
}
}
//Adding cosumed stock from the entered date.
dtTemp = new DataTable();
string qry = "select ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i where ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wo.IssuedToPersonnelID is not null AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate>='10-01-2015' group by ig.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][0].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock += Convert.ToDecimal(dtTemp.Rows[i][1].ToString());
}
}
}
dset.AcceptChanges();
var qry10 = from us in dset.UserConsume.AsEnumerable()
group us by us.ItemGroupID into g
select new
{
TOTAL = g.Sum(x => x.ConsumptionQty),
IG = g.Key
};
foreach (var res in qry10)
{
//Response.Write(res.IG.ToString() +"-"+res.TOTAL.ToString()+ "----------");
var qrry = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == res.IG
select igs;
foreach (var res2 in qrry)
{
res2.ClosingStock = res2.OpeningStock - res.TOTAL;
}
}
rdoc = new ReportDocument();
rdoc.Load(Server.MapPath("~/Report/WSDayBookRpt.rpt"));
rdoc.SetDataSource(dset);
CrystalReportViewer1.DataBind();
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
}
}
请帮帮我.. 我曾尝试使用会话,但我无法在第二页之后导航,如果我使用写页码进行导航,它会正常工作...
谢谢和问候,
更新
public partial class WSDayBookReport : System.Web.UI.Page
{
SQLClass sqlfunc = new SQLClass();
ReportDocument rdoc = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (Session["CRpt"] != null)
{
rdoc =(ReportDocument) Session["CRpt"];
}
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
}
else
{
// 'NOT POSTBACK
}
}
protected void Page_Unload(object sender, EventArgs e)
{
if (Session["CRpt"] != null)
{
Session.Remove("CRpt");
}
Session["CRpt"]=rdoc;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
DayBookDataSet dset = new DayBookDataSet();
//OpeningStock();
string qry = "select i.ItemGroupID, ig.ItemGroupCode As ItemGroupCode, Sum(iss.RegularStock) As OpeningStock from ItemStock iss, Item i, ItemGroup ig where ig.ItemGroupID = i.ItemGroupID AND iss.ItemID = i.ItemId group by i.ItemGroupID,ig.ItemGroupCode";
sqlfunc.GetDataFromDT(dset.ItemGroupStock, qry, "sqlcon");
var q1 = from igs in dset.ItemGroupStock.AsEnumerable()
select igs;
foreach (var res in q1)
{
res.ConsumedStock = 0;
res.ClosingStock = 0;
}
// loadUser();
qry = "select pp.PersonnelParticularID As UserID, pp.PersonnelName As UserName from WineOrder wo, WineOrderDetail wod, PersonnelParticular pp, ItemGroup ig, Item i where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by pp.PersonnelParticularID,pp.PersonnelName";
sqlfunc.GetDataFromDT(dset.UserMaster, qry, "sqlcon");
if (dset.UserMaster.Rows.Count == 0)
{
lblStatus.Text = "No Consumption on selected date.";
CrystalReportViewer1.ReportSource = null;
if (Session["ssnRdoc"] != null)
{
Session.Remove("ssnRdoc");
}
return;
}
else
{
lblStatus.Text = "";
}
//user consumption
qry = "select pp.PersonnelParticularID As UserID,ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i, PersonnelParticular pp where pp.PersonnelParticularID = wo.IssuedToPersonnelID AND ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID, pp.PersonnelParticularID";
sqlfunc.GetDataFromDT(dset.UserConsume, qry, "sqlcon");
dset.AcceptChanges();
ViewState.Add("vsDset", dset);
//Deducting new RU Entry after the entered date...
DataTable dtTemp = new DataTable();
string qry2 = "select Sum(rs.Quantity) As Qty,i.ItemGroupID from RegularStock rs, Item i where i.ItemID = rs.ItemID AND rs.RSDate>='" + Convert.ToDateTime(txtDate.Text).ToString("MM/dd/yyyy") + "' Group by i.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry2, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][1].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock -= Convert.ToDecimal(dtTemp.Rows[i][0].ToString());
}
}
}
//Adding cosumed stock from the entered date.
dtTemp = new DataTable();
qry = "select ig.ItemGroupID, sum(wod.OrderQty) As ConsumptionQty from WineOrder wo, WineOrderDetail wod, ItemGroup ig, Item i where ig.ItemGroupID = i.ItemGroupID AND i.ItemID = wod.ItemID AND wo.IssuedToPersonnelID is not null AND wod.IsOrderCancelled = 0 AND wod.WineOrderId = wo.WineOrderId AND wo.WineOrderDate>='" + Convert.ToDateTime(txtDate.Text.Trim()).ToString("MM/dd/yyyy") + "' group by ig.ItemGroupID";
sqlfunc.GetDataFromDT(dtTemp, qry, "sqlcon");
if (dtTemp.Rows.Count > 0)
{
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
var q5 = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == Convert.ToInt32(dtTemp.Rows[i][0].ToString())
select igs;
foreach (var res in q5)
{
res.OpeningStock += Convert.ToDecimal(dtTemp.Rows[i][1].ToString());
}
}
}
dset.AcceptChanges();
var qry10 = from us in dset.UserConsume.AsEnumerable()
group us by us.ItemGroupID into g
select new
{
TOTAL = g.Sum(x => x.ConsumptionQty),
IG = g.Key
};
foreach (var res in qry10)
{
var qrry = from igs in dset.ItemGroupStock.AsEnumerable()
where igs.ItemGroupID == res.IG
select igs;
foreach (var res2 in qrry)
{
res2.ClosingStock = res2.OpeningStock - res.TOTAL;
}
}
ViewState.Add("vsDset", dset);
rdoc.Load(Server.MapPath("~/Report/WSDayBookRpt.rpt"));
rdoc.SetDataSource(dset);
CrystalReportViewer1.DataBind();
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
Session["CRpt"]= rdoc;
}
}
您的 CrystalReportViewer 控件可能丢失了 PostBack 上的 ReportDocument。您必须按照以下方式进行操作:
在页面级别声明您的 ReportDocument 对象
ReportDocument rdoc = new ReportDocument();
在 Page_Load 事件中从 Session 对象加载 ReportDocument
protected void Page_Load(System.Object sender, System.EventArgs e) {
if (Page.IsPostBack) {
if (Session.Item("CRpt") != null) {
rdoc = Session.Item("CRpt");
}
CrystalReportViewer1.ReportSource = rdoc;
CrystalReportViewer1.RefreshReport();
} else {
'NOT POSTBACK
if (Session.Item("CRpt") != null) {
Session.Remove("CRpt");
}
Session.Add("CRpt", rdoc);
}
}
在 btnSubmit 上创建 ReportDocument 并将其添加到 Session
protected void btnSubmit_Click(object sender, EventArgs e) {
//Populate Report
rdoc.SetDataSource(dset);
CrystalReportViewer1.ReportSource = rdoc;
Session.Add("CRpt", rdoc);
}
除此之外,如果您在设置 LogOnInfo 方面需要特定帮助,那么您也可以查看此 SO post Report asking for database login on setting DataTable as DataSource