2011-03-10 146 views
1

crystal report有两个参数字段,但是,我用了三种搜索方法,都失败了。 错误缺少参数值。如何将参数传递给水晶报表?

确保参数是通过标签

但检查查询字符串 http://localhost:1604/Cheques/viewReport.aspx?type=TT&ID=5&tCOMDB=Project_TR_TP_COM_Test 路过,不知道为什么错误缺少参数值。

方法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); 

存储过程此晶体报告数据库使用, 参数字段被自动添加,之后加入我删除@字符 不知道为什么缺少参数

回答

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(“用户”,“passwd文件”),那么成功

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 }); 
    } 
} 

这是假设你的URL参数具有相同名称与报表参数。

此外,的ReportViewerReportViewer对象(在你的ASPX页面控件),而不是ReportDocument

+0

p没有名称和当前值属性 – Jo0o0 2011-03-10 04:01:57

+0

我改变parameterfield – Jo0o0 2011-03-10 04:03:48

+0

尝试失败 – Jo0o0 2011-03-10 04:05:48

0

没有ü检查打印外貌是否存在于你的水晶报表?它将PrintView也作为参数。传递值为true或false为此。

+0

什么是printview?如何知道是否存在?如何将true或false传递给printview?是它objRpt.SetParameterValue(“PrintView”,真),我试过失败 – Jo0o0 2011-03-10 09:04:16

+0

我离开办公室,希望你明天的帮助! – Jo0o0 2011-03-10 10:00:15

相关问题