水晶报告有两个参数字段,但是,我使用了三种方法搜索,都失败了。 错误缺少参数值。
确保参数通过查询字符串传递 http://localhost:1604/Cheques/viewReport.aspx?type=TT&ID=5&tCOMDB=Project_TR_TP_COM_Test 由标签检查
但是,不知道为什么Error缺少参数值。
方法1
// First parameter
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
crParameterDiscreteValue.Value = Request.QueryString["ID"];
crParameterFieldDefinitions = objRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["Cheque_IssueRecord_Secretary_Review_TT_ID"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
// Second parameter
ParameterFieldDefinitions crParameterFieldDefinitions2;
ParameterFieldDefinition crParameterFieldDefinition2;
ParameterValues crParameterValues2 = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue2 = new ParameterDiscreteValue();
crParameterDiscreteValue2.Value = Request.QueryString["tCOMDB"];
crParameterFieldDefinitions2 = objRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition2 = crParameterFieldDefinitions2["tCOMDB"];
crParameterValues2 = crParameterFieldDefinition2.CurrentValues;
crParameterValues2.Clear();
crParameterValues2.Add(crParameterDiscreteValue2);
crParameterFieldDefinition2.ApplyCurrentValues(crParameterValues2);
方法2
//objRpt.SetParameterValue("Cheque_IssueRecord_Secretary_Review_TT_ID", Request.QueryString["ID"]);
//objRpt.SetParameterValue("tCOMDB", Request.QueryString["tCOMDB"]);
方法3
var value = new ParameterDiscreteValue();
value.Value = Request.QueryString["ID"];
objRpt.ParameterFields["Cheque_IssueRecord_Secretary_Review_TT_ID"].CurrentValues.Add(value);
var value2 = new ParameterDiscreteValue();
value2.Value = Request.QueryString["tCOMDB"];
objRpt.ParameterFields["tCOMDB"].CurrentValues.Add(value2);
这个水晶报表数据库使用存储过程, 参数字段自动添加,添加后我删除@字符 不知道参数缺失的原因
答案 0 :(得分:1)
试试这个:
foreach (var p in reportViewer.ParameterFieldInfo)
{
if (QueryString.ContainsKey(p.Name))
{
var value = QueryString[p.Name];
if (p.CurrentValues.Count > 0)
((ParameterDiscreteValue)p.CurrentValues[0]).Value = value;
else
p.CurrentValues.Add(new ParameterDiscreteValue() { Value = value });
}
}
这假设您的网址参数与报告参数的名称相同。
此外, reportViewer 是ReportViewer
对象(您的ASPX页面中的控件),而不是ReportDocument
答案 1 :(得分:1)
我解决了
objRpt.SetParameterValue(0, Convert.ToInt32(Request.QueryString["Cheque_IssueRecord_Secretary_Review_TT_ID"]));
objRpt.SetParameterValue(1, Request.QueryString["tCOMDB"]);
//The viewer's reportsource must be set to a report before any parameter fields can be accessed.
CrystalReportViewer1.ReportSource = objRpt;
使用上面的代码并删除刷新报告和setlogondatabase(“user”,“passwd”)然后成功
答案 2 :(得分:0)
您是否检查过水晶报告中是否存在打印视图?它还将Print View作为参数。为此传递值true或false。