C# 如何将参数传递给crystal report?

C# 如何将参数传递给crystal report?,c#,asp.net,crystal-reports,C#,Asp.net,Crystal Reports,crystal report有两个参数字段,但我使用了三种方法搜索,都失败了。 错误是缺少参数值 确定参数正在通过查询字符串传递 按标签检查 但是,不知道为什么错误缺少参数值 方法1 // First parameter ParameterFieldDefinitions crParameterFieldDefinitions; ParameterFieldDefinition crParameterFieldDefinition;

crystal report有两个参数字段,但我使用了三种方法搜索,都失败了。 错误是缺少参数值

确定参数正在通过查询字符串传递 按标签检查

但是,不知道为什么错误缺少参数值

方法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); 
此水晶报表数据库使用存储过程, 参数字段是自动添加的,添加后我删除@字符 不知道为什么参数丢失

请尝试以下操作:

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 });
    }
}
这假定URL参数与报表参数具有相同的名称


此外,reportViewer是
reportViewer
对象(您在ASPX页面中的控件),而不是
ReportDocument

您是否检查了crystal报表中是否存在printview?它还将PrintView作为参数。为此传递值true或false。

我已解决

            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(“用户”、“密码”),然后成功

p没有名称和当前值属性,确保查询键与参数字段名称相同,失败我已尝试使用reportViewer,但它可以编译,因为它是正确的,仍然缺少参数值是否确实要传递所有参数?什么是printview?如何知道是否存在?如何将true或false传递给printview?是否为objRpt.SetParameterValue(“PrintView”,true);,我试过了,但失败了