使用Visual Studio 2010和Crystal Reports 13.0。
对于报告,提示用户输入值。然后生成报告没有问题。
如果用户离开report.aspx页面并返回运行另一个报告,则提示不会显示,并且上次运行的报告仍然存在,其中包含用户的原始值。
寻找解决方案,发现的只有两个不起作用:
//After the report loads
CrystalReportSource1.ReportDocument.ParameterFields.Clear();
错误:
您无法使用此方法添加,删除或修改参数字段。请直接修改报告。
直接修改报告:
右键单击Crystal Report的正文 然后转到:
设计 - >默认设置.. - >报告
选中复选框
加载报告时丢弃已保存的数据。
这不起作用。上一份报告仍然填充。
所以,我现在要求对如何解决这个问题有所了解。
一如既往,欢迎任何建议。
由于
编辑:
以下是报告页面背后的代码。许多报告使用此页面....
CrystalReportSource1.Report.FileName = "reports\\" + fileName + ".rpt";
//CrystalReportSource1.Report.Parameters.Clear();
//CrystalReportSource1.Report = null;
//CrystalReportSource1.Report.Refresh();
if (!string.IsNullOrEmpty(Request.QueryString["item"]))
{
String Item = Request.QueryString["item"];
CrystalDecisions.Web.Parameter temp = new CrystalDecisions.Web.Parameter();
temp.Name = "Item";
temp.DefaultValue = Item;
CrystalReportSource1.Report.Parameters.Add(temp);
}
SqlConnectionStringBuilder settings = new SqlConnectionStringBuilder(MyConnectionString);
_crReportDocument = CrystalReportSource1.ReportDocument;
_crConnectionInfo.ServerName = settings.DataSource;
_crConnectionInfo.DatabaseName = settings.InitialCatalog;
_crConnectionInfo.UserID = settings.UserID;
_crConnectionInfo.Password = settings.Password;
//Get the table information from the report
_crDatabase = _crReportDocument.Database;
_crTables = _crDatabase.Tables;
//Loop through all tables in the report and apply the
//connection information for each table.
for (int i = 0; i < _crTables.Count; i++)
{
_crTable = _crTables[i];
_crTableLogOnInfo = _crTable.LogOnInfo;
_crTableLogOnInfo.ConnectionInfo = _crConnectionInfo;
_crTable.ApplyLogOnInfo(_crTableLogOnInfo);
}
答案 0 :(得分:0)
您可以尝试在Page_Unload事件中使用它。
Report.Close();
Report.Dispose();
当页面被卸载时,应该删除报告,当用户返回页面时,您将重新开始。 这篇文章中有一个很好的例子here。
答案 1 :(得分:0)
我找到了解决方案!!!! --------不
在我上面的问题中的所有代码之前添加此行:
CrystalReportViewer1.ParameterFieldInfo.Clear();
然后加载文件名等等.......