如何向 CrystalReportViewer 和 ReportDocument 傳遞參數



如何向 CrystalReportViewer 和 ReportDocument 傳遞參數……   
一、CrystalReportViewer
通過 CrystalReportViewer.ParameterFieldInfo 屬性……
1、CrystalReportViewer 成員
公共實例屬性
ParameterFieldInfo(從 CrystalReportViewerbase 繼承) ParameterFields。獲取或設置參數字段集合。
二、ReportDocument
通過 ReportDocument.DataDefinition.ParameterFields 屬性……
1、ReportDocument 成員
公共實例屬性
DataDefinition DataDefinition。獲取 DataDefinition 對象。
2、DataDefinition 成員
公共實例屬性
ParameterFields ParameterFieldDefinitions。獲取 ParameterFieldDefinitions 集合。
三、參數字段運行時自定義(CrystalReportViewer)
參考:
設置參數 | Windows 窗體查看器的綁定選項 | Web 窗體查看器的綁定選項

可支持用戶在 Crystal 報表中通過參數進行輸入。這種參數有多種用途。例如:
使參數基於數據庫字段並允許用戶指定該字段的值,以便對報表中的數據進行篩選。
使用參數字段將條件格式應用於報表。
使用參數字段來定義排序順序。
下列示例說明如何在運行時通過代碼設置參數字段值。此例解釋瞭如何設置兩個不同的參數:第一個是多值離散參數,第二個是區域值參數。

在運行時修改參數字段

[C#]
// 聲明將參數傳遞給
//查看器控件所需的變量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();

// 第一個參數是具有多個值的離散參數。

// 設置參數字段的名稱,它必須
//和報表中的參數相符。
paramField.ParameterFieldName = "客戶姓名";

// 設置第一個離散值並將其傳遞給該參數。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);

// 設置第二個離散值並將其傳遞給該參數。
// discreteVal 變量被設置爲新值,這樣,以前的設置
//就不會被覆蓋。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);

// 將該參數添加到參數字段集合。
paramFields.Add (paramField);

// 第二個參數爲區域值。paramField 變量
//被設置爲新值,這樣,以前的設置就不會被覆蓋。
paramField = new ParameterField ();

// 設置參數字段的名稱,它必須
//和報表中的參數相符。
paramField.ParameterFieldName = "客戶 ID";

// 設置範圍的開始值和結束值並將該範圍傳遞給
//該參數。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);

// 將第二個參數添加到參數字段集合。
paramFields.Add (paramField);

// 將參數字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;



水晶報表版本9.2,後臺是sqlserver 2000,該報表數據源是一個有兩個參數的存儲過程
結果不管我傳什麼參數,報表的結果都是水晶報表開發環境中的結果.參數根本沒傳進去.
請各位兄弟幫忙看看問題出在哪兒
下面是代碼
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace erpreports
{
 /// <summary>
 /// Summary description for WebForm1.
 /// </summary>
 public class WebForm1 : System.Web.UI.Page
 {
  protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
  mrb_pnper rpt;
  ParameterFields crParameterFields;
  ParameterField crParameterField;
  ParameterValues crParameterValues;
  ParameterDiscreteValue crParameterDiscreteValue;

  private void Page_Load(object sender, System.EventArgs e)
  {
   // Put user code to initialize the page here
  }

  #region Web Form Designer generated code
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: This call is required by the ASP.NET Web Form Designer.
   //
   InitializeComponent();
   base.OnInit(e);
   rpt = new mrb_pnper();
   CrystalReportViewer1.ReportSource = rpt;

   //Get the collection of parameters from the report
   crParameterFields = CrystalReportViewer1.ParameterFieldInfo;

   crParameterField = crParameterFields["@begindate"];
   crParameterValues = crParameterField.CurrentValues;
   crParameterDiscreteValue = new ParameterDiscreteValue();
   crParameterDiscreteValue.Value = Request.QueryString["begindate"];
   crParameterValues.Add(crParameterDiscreteValue);

   crParameterField = crParameterFields["@enddate"];
   crParameterValues = crParameterField.CurrentValues;
   crParameterDiscreteValue = new ParameterDiscreteValue();
   crParameterDiscreteValue.Value = Request.QueryString["enddate"];
   crParameterValues.Add(crParameterDiscreteValue);
   CrystalReportViewer1.ParameterFieldInfo = crParameterFields;

  }
  
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章