2011-03-10 138 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