2012-02-07 60 views

回答

2

将任何数据类型的一个或多个参数从C#传递给Crystal Report ...可以在页面加载事件中编写代码。

if (Session["RPT_NAME"] != null) 
    { 

     ReportDocument rpt = new ReportDocument(); 
     rpt.Load(Server.MapPath((string)Session["RPT_NAME"])); 


     int cnt = rpt.DataDefinition.ParameterFields.Count; 
     for (int i = 0; i < cnt; i++) 
     { 
      ParameterValues myvals = new ParameterValues(); 
      ParameterDiscreteValue myDiscrete = new ParameterDiscreteValue(); 

      switch (rpt.DataDefinition.ParameterFields[i].ParameterValueKind) 
      { 
       case CrystalDecisions.Shared.ParameterValueKind.DateTim eParameter: 
        myDiscrete.Value = Convert.ToDateTime(Request.QueryString[i]); 
        break; 

       case CrystalDecisions.Shared.ParameterValueKind.Boolean Parameter: 
        myDiscrete.Value = bool.Parse(Request.QueryString[i]); 
        break; 
       case CrystalDecisions.Shared.ParameterValueKind.DatePar ameter: 
        myDiscrete.Value = Convert.ToDateTime(Request.QueryString[i]); 
        break; 
       case CrystalDecisions.Shared.ParameterValueKind.NumberP arameter: 
        myDiscrete.Value = int.Parse(Request.QueryString[i]); 
        break; 
       case CrystalDecisions.Shared.ParameterValueKind.StringP arameter: 
        myDiscrete.Value = Convert.ToString((Request.QueryString[i])); 
        break; 
      } 
      myvals.Add(myDiscrete); 
      rpt.DataDefinition.ParameterFields[i].ApplyCurrentValues(myvals); 
     } 
     CrystalReportViewer1.ReportSource = rpt; 
     CrystalReportViewer1.DataBind(); 
    }