我整天都在尝试解决问题,但是无法解决。我有一个水晶报表,我想在运行时传递参数,但仍然继续提示输入参数。下面是我的代码:
public void LoadReport()
{
string studenNo = "A170034511";
ReportDocument cryRpt = new ReportDocument();
string reportName = "StdReport";
cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));
ParameterFields parameterFields = new ParameterFields();
//First Parameter
var parameterField1 = new ParameterField();
var parameterDiscreteValue1 = new ParameterDiscreteValue();
parameterField1.ParameterFieldName = "StudentNo";
parameterDiscreteValue1.Value = studenNo;
parameterField1.CurrentValues.Add(parameterDiscreteValue1);
parameterFields.Add(parameterField1);
//second Parameter
var parameterField2 = new ParameterField();
var parameterDiscreteValue2 = new ParameterDiscreteValue();
parameterField2.ParameterFieldName = "Year";
parameterDiscreteValue2.Value = "2017";
parameterField2.CurrentValues.Add(parameterDiscreteValue2);
parameterFields.Add(parameterField2);
rptViewer.ParameterFieldInfo = parameterFields;
rptViewer.ReportSource = cryRpt;
rptViewer.RefreshReport();
}
有了这些,参数窗口仍然保持显示。我在做什么错了。
答案 0 :(得分:0)
我到处都在寻找解决问题的方法,但是没有帮助。经过大量尝试,我能够解决此问题。这是我的发现:
请勿调用CrystalReportViewer.RefreshReport()。这将刷新报告,并导致报告清除所有已传递的参数。
加载报告后调用CrystalReport.Refresh()
在设置CrystalReportViewer报表源后添加参数。
下面是适用于我整个项目的最终代码,其中包含100多个报告:
public void LoadReport()
{
string studenNo = "A170034511";
ReportDocument cryRpt = new ReportDocument();
string reportName = "StdReport";
cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));
cryRpt.Refresh();
rptViewer.ReportSource = cryRpt;
ParameterFields parameterFields = new ParameterFields();
//First Parameter
var parameterField1 = new ParameterField();
var parameterDiscreteValue1 = new ParameterDiscreteValue();
parameterField1.ParameterFieldName = "StudentNo";
parameterDiscreteValue1.Value = studenNo;
parameterField1.CurrentValues.Add(parameterDiscreteValue1);
parameterFields.Add(parameterField1);
//second Parameter
var parameterField2 = new ParameterField();
var parameterDiscreteValue2 = new ParameterDiscreteValue();
parameterField2.ParameterFieldName = "Year";
parameterDiscreteValue2.Value = "2017";
parameterField2.CurrentValues.Add(parameterDiscreteValue2);
parameterFields.Add(parameterField2);
rptViewer.ParameterFieldInfo = parameterFields;
rptViewer.HasCrystalLogo = false;
rptViewer.Zoom(100);
}
我希望这将帮助很多与我有同样问题的人。如果有帮助,请记住投票作为答案。