ASP.NET下crystalreport参数输入的动态化

本文介绍了一种通过动态获取报表参数并生成相应报表的方法。利用反射机制动态加载报表参数,并根据用户输入显示不同类型的报表。支持导出为多种格式及打印功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、从数据库中选出报表的ID等信息放入datagrid。

2、动态地添加参数的Label,TextBox及验证控件:

 

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
 
namespace TestRH
{
      ///<summary>
      /// Summary description for WebForm1.
      ///</summary>
      public class WebForm1 : System.Web.UI.Page
      {
            protected System.Web.UI.WebControls.Table table;
            protected System.Web.UI.WebControls.Label Label1;
            public int length;
//          private string num = Request.QueryString["num"];
     
            private void Page_Load(object sender, System.EventArgs e)
            {
                        //Get parameter
                        string num = (Request.QueryString["num"]).Substring(5);
                        string rp = "TestRH.GetPara" + num;
                        Type t = Type.GetType(rp);
                        if(t==null)
                        {
                              Response.Redirect("Preview.aspx?num="+(Request.QueryString["num"]) + "&Type=" +(Request.QueryString["Type"]));
                        }
                        FieldInfo[] fi = t.GetFields();
                        length = fi.Length;
                        string [] strArray = new string[length];
                        int n = 0;
                        foreach(FieldInfo i in fi)
                        {
                              strArray[n] = i.Name;
                              n++;
                        }
 
                        //Add label and textBox
                        foreach(string s in strArray)
                        {
                              TableRow tr=new TableRow();
                              TableCell tc1=new TableCell();
                              TableCell tc2=new TableCell();
                              Label lb = new Label();
                              TextBox tbx=new TextBox();
                              lb.ID = "lb"+this.table.Rows.Count;
                              lb.Text = s;
                              tbx.ID="tb"+this.table.Rows.Count;
                              tc1.Controls.Add(lb);
                              tc2.Controls.Add(tbx);
                              tr.Controls.Add(tc1);
                              tr.Controls.Add(tc2);
                              this.table.Rows.Add(tr);
                        }
 
                  TableRow tr1 =new TableRow();
                  TableCell tc3 = new TableCell();
                  TableCell tc4 = new TableCell();
                  Button bt1 = new Button();
                  Button bt2 = new Button();
                  bt1.Text = "Run";
                  bt1.CssClass = "button";
                  bt1.Width = 70;
            bt1.Click +=new EventHandler(Run_Click);
                  bt2.Text = "Cancel";
                  bt2.CssClass = "button";
                  bt2.Width = 70;
                  bt2.Click +=new EventHandler(Cancel_Click);
                  tc3.Controls.Add(bt1);
                  tc4.Controls.Add(bt2);
                  tr1.Controls.Add(tc3);
                  tr1.Controls.Add(tc4);
                  this.table.Rows.Add(tr1);
            }
 
            private void Run_Click(object sender, System.EventArgs e)
            {
                  for(int i=0;i<length;i++)
                  {
                        string tbID = "tb" + i;
                        TextBox tbInput =(TextBox)(this.table.FindControl(tbID));
 
                        //get DateFrom and DateTo.
                        string lbID = "lb" + i;
                        Label lb =(Label)(this.table.FindControl(lbID));
                        string ft = lb.Text.ToString();
                        int from = ft.CompareTo("DateFrom");
                        int to = ft.CompareTo("DateTo");
                        if(from == 0)
                              Session["DateFrom"] = tbInput.Text;
                        if(to == 0 )
                              Session["DateTo"] = tbInput.Text;
                       
                        Session[i.ToString()] = tbInput.Text;
                  }
                  Response.Redirect("Preview.aspx?num="+Request.QueryString["num"]+"&Type="+Request.QueryString["Type"]);
            }
 
            private void Cancel_Click(object sender,System.EventArgs e)
            {
                  Response.Redirect("ReportManager.aspx");
            }
 
            #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);
            }
           
            ///<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
     
      }
}
 

3、显示页面:

 

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
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;
using Rhombus3.RP.Rp00060;
using Rhombus3.RP.Rp00063;
using Rhombus3.RP.Rp00026;
using Rhombus3.RP.Rp00030;
using Rhombus3.RP.Rp00054;
using Rhombus3.RP.Rp00059;
using Rhombus3.RP.Rp00061;
using Rhombus3.RP.Rp00070;
using Rhombus3.RP.Rp00072;
using Rhombus3.RP.Rp00075;
using Rhombus3.RP.Rp00076;
using Rhombus3.RP.Rp00001;
 
namespace Rhombus3
{
      ///<summary>
      /// Summary description for BeginRp00060.
      ///</summary>
      public class Preview : System.Web.UI.Page
      {
            protected System.Web.UI.WebControls.Button Print;
            protected System.Web.UI.WebControls.Button Export;
            protected System.Web.UI.WebControls.Label Label1;
            protected System.Web.UI.WebControls.DropDownList ddlFormat;
            protected CrystalDecisions.Web.CrystalReportViewer crView;
            protected ParameterFields paramFields = new ParameterFields ();
 
            protected ParameterValues pvDF;
            protected ParameterValues pvDT;
            protected ParameterValues pvCorporationName;
            protected ParameterValues pvCompanyID;
            protected ParameterValues pvCCID;
            protected ParameterValues pvUserID;
            protected ParameterValues pvReportID;
            protected ParameterValues pvType;
 
            protected string name;
             
            private void Page_Load(object sender, System.EventArgs e)
            {
                  ReportDocument rd = this.GetRD();
            ParameterFields pf = this.GetSession();
                  this.crView.ParameterFieldInfo = pf;
                  this.crView.ReportSource = rd;
            }
 
            #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);
            }
           
            ///<summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            ///</summary>
            private void InitializeComponent()
            {   
                  this.Export.Click += new System.EventHandler(this.Export_Click);
                  this.Print.Click += new System.EventHandler(this.Print_Click);
                  this.Load += new System.EventHandler(this.Page_Load);
 
            }
            #endregion
 
            private ReportDocument GetRD()
            {
                  try
                  {
                        string num = Request.QueryString["num"].Substring(5);
                        #region switch
                        switch(num)
                        {
                              case "26":
                                    Rp00026LoadData testLD26 = new Rp00026LoadData();
                                    ReportDocument rp26=testLD26.generateReport(Session["0"].ToString(),Session["1"].ToString(),Session["2"].ToString(),
                                          Convert.ToDateTime(Session["3"]),Session["4"].ToString(),Session["5"].ToString());
                                    return rp26;
                              case "30":
                                    Rp00030LoadData testLD30 = new Rp00030LoadData();
                                    ReportDocument rp30=testLD30.generateReport(Session["0"].ToString(),Convert.ToDateTime(Session["1"]),Session["2"].ToString(),Session["3"].ToString());
                                    return rp30;
                              case "54":
                                    Rp00054LoadData testLD54 = new Rp00054LoadData();
                                    ReportDocument rp54=testLD54.generateReport(Session["0"].ToString(),Session["1"].ToString(),Session["2"].ToString(),Session["3"].ToString(),
                                          Convert.ToDateTime(Session["4"]),Convert.ToDateTime(Session["5"]),Session["6"].ToString(),Session["7"].ToString(),Session["8"].ToString(),Convert.ToDateTime(Session["9"]));
                                    return rp54;
                              case "59":
                                    Rp00059LoadData testLD59 = new Rp00059LoadData();
                                    ReportDocument rp59=testLD59.generateReport(Session["0"].ToString(),Convert.ToDateTime(Session["1"]),Convert.ToDateTime(Session["2"]),Convert.ToInt16(Session["3"]),Session["4"].ToString(),Session["5"].ToString());
                                    return rp59;
                              case "60":
                                    Rp00060LoadData testLD60 = new Rp00060LoadData();
                                    ReportDocument rp60=testLD60.generateReport(Convert.ToDateTime(Session["0"]),Convert.ToDateTime(Session["1"]));
                                    return rp60;
                              case "61":
                                    Rp00061LoadData testLD61 = new Rp00061LoadData();
                                    ReportDocument rp61=testLD61.generateReport(Convert.ToDateTime(Session["0"]),Convert.ToDateTime(Session["1"]),Convert.ToDateTime(Session["1"]));
                                    return rp61;
                              case "63":
                                    Rp00063LoadData testLD63 = new Rp00063LoadData();
                                    ReportDocument rp63 =testLD63.generateReport(Session["0"].ToString(),Convert.ToDateTime(Session["1"]),Convert.ToDateTime(Session["2"]),Convert.ToInt16(Session["3"]));
                                    return rp63;
                              case "70":
                                    Rp00070LoadData testLD70 = new Rp00070LoadData();
                                    ReportDocument rp70=testLD70.generateReport( Convert.ToDateTime(Session["0"]),Convert.ToDateTime(Session["1"]),Session["2"].ToString(),Session["3"].ToString(),Session["4"].ToString());
                                    return rp70;
                              case "72": //no parameter
                                    Rp00072LoadData testLD72 = new Rp00072LoadData();
                                    ReportDocument rp72=testLD72.generateReport();
                                    return rp72;
                              case "75":
                                    Rp00075LoadData testLD75 = new Rp00075LoadData();
                                    ReportDocument rp75=testLD75.generateReport(Session["0"].ToString(),Session["1"].ToString(),Session["2"].ToString(),Session["3"].ToString());
                                    return rp75;
                              case "76":
                                    Rp00076LoadData testLD76 = new Rp00076LoadData();
                                    ReportDocument rp76=testLD76.generateReport(Session["0"].ToString(),Session["1"].ToString(),Session["2"].ToString(),Session["3"].ToString());
                                    return rp76;
                              case "01":
                                    RP00001LoadData testLD01 = new RP00001LoadData();
                                    ReportDocument rp01=testLD01.generateRD(Convert.ToInt16(Session["0"]),Session["1"].ToString());
                                    return rp01;
                              default:
                                    return null;
                        }
                        #endregion
                  }
                  catch(Exception ee)
                  {
                        Console.WriteLine(ee.Message);
                  }
                  return null;
            }
     
            protected ParameterFields GetSession()
            {
                  ParameterField paramFieldf = new ParameterField ();
                  ParameterDiscreteValue discreteValf = new ParameterDiscreteValue ();
                  if(Session["DateFrom"]!=null)
                  {    
                        paramFieldf.ParameterFieldName = "Period from";
                        discreteValf.Value = Session["DateFrom"].ToString();
                        pvDF = paramFieldf.CurrentValues;
                        pvDF.Add (discreteValf);
                        this.paramFields.Add (paramFieldf);
                  }
 
                  ParameterField paramFieldt = new ParameterField ();
                  ParameterDiscreteValue discreteValt = new ParameterDiscreteValue ();
                  if(Session["DateTo"]!=null)
                  {
                        paramFieldt.ParameterFieldName = "Period to";
                        discreteValt.Value = Session["DateTo"].ToString();
                        pvDT = paramFieldt.CurrentValues;
                        pvDT.Add (discreteValt);
                        this.paramFields.Add (paramFieldt);
                  }
 
            ParameterField paramField = new ParameterField ();
                  paramField.ParameterFieldName = "iprmCorporateName";
                  ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
                  discreteVal.Value = Session["CorporationName"].ToString();
                  pvCorporationName = paramField.CurrentValues;
                  pvCorporationName.Add (discreteVal);
                  paramFields.Add (paramField);
 
                  ParameterField paramField1 = new ParameterField ();
                  paramField1.ParameterFieldName = "hprmCompanyID";
                  ParameterDiscreteValue discreteVal1 = new ParameterDiscreteValue ();
                  discreteVal1.Value = Session["CompanyID"].ToString();
                  pvCompanyID = paramField1.CurrentValues;
                  pvCompanyID.Add (discreteVal1);
                  paramFields.Add (paramField1);
 
                  ParameterField paramField2 = new ParameterField ();
                  paramField2.ParameterFieldName = "sprmDepartment";
                  ParameterDiscreteValue discreteVal2 = new ParameterDiscreteValue ();
                  discreteVal2.Value = Session["CostCenterID"].ToString();
                  pvCCID = paramField2.CurrentValues;
                  pvCCID.Add (discreteVal2);
                  paramFields.Add (paramField2);
 
                  ParameterField paramField3 = new ParameterField ();
                  paramField3.ParameterFieldName = "hprmUserID";
                  ParameterDiscreteValue discreteVal3 = new ParameterDiscreteValue ();
                  discreteVal3.Value = Session["UserID"].ToString();
                  pvUserID = paramField3.CurrentValues;
                  pvUserID.Add (discreteVal3);
                  paramFields.Add (paramField3);
 
                  ParameterField paramField4 = new ParameterField ();
                  paramField4.ParameterFieldName = "hprmReportID";
                  ParameterDiscreteValue discreteVal4 = new ParameterDiscreteValue ();
                  discreteVal4.Value = Request.QueryString["num"].ToString();
                  pvReportID = paramField4.CurrentValues;
                  pvReportID.Add (discreteVal4);
                  paramFields.Add (paramField4);
 
                  ParameterField paramField5 = new ParameterField ();
                  paramField5.ParameterFieldName = "Type";
                  ParameterDiscreteValue discreteVal5 = new ParameterDiscreteValue ();
                  discreteVal5.Value = Request.QueryString["Type"].ToString();
                  pvType = paramField5.CurrentValues;
                  pvType.Add (discreteVal5);
                  paramField5.CurrentValues.Add (discreteVal5);
                  paramFields.Add (paramField5);
 
                  return paramFields;
            }
 
            private void Print_Click(object sender, System.EventArgs e)
            {
                  PrinterSettings printer = new PrinterSettings();
                  if(printer.IsDefaultPrinter)
                  {
                        ReportDocument ReportDoc = this.GetRD();
                        if(Session["DateFrom"]!=null)
                        {
                              ReportDoc.DataDefinition.ParameterFields["Period from"].ApplyCurrentValues(pvDF);
                        }
                        if(Session["DateTo"]!=null)
                        {
                              ReportDoc.DataDefinition.ParameterFields["Period to"].ApplyCurrentValues(pvDT);
                        }
                        ReportDoc.DataDefinition.ParameterFields["iprmCorporateName"].ApplyCurrentValues(pvCorporationName);
                        ReportDoc.DataDefinition.ParameterFields["hprmCompanyID"].ApplyCurrentValues(pvCompanyID);
                        ReportDoc.DataDefinition.ParameterFields["sprmDepartment"].ApplyCurrentValues(pvCCID);
                        ReportDoc.DataDefinition.ParameterFields["hprmUserID"].ApplyCurrentValues(pvUserID);
                        ReportDoc.DataDefinition.ParameterFields["hprmReportID"].ApplyCurrentValues(pvReportID);
                        ReportDoc.DataDefinition.ParameterFields["Type"].ApplyCurrentValues(pvType);
                        ReportDoc.PrintOptions.PrinterName = printer.PrinterName;
                        ReportDoc.PrintToPrinter(1,true,0,0);
                  }
            }
 
            private void Export_Click(object sender, System.EventArgs e)
            {
                 if (Directory.Exists(ConfigurationSettings.AppSettings["TempDir"]) == false)
                        Directory.CreateDirectory(ConfigurationSettings.AppSettings["TempDir"]);
                  string tempFileName =ConfigurationSettings.AppSettings["TempDir"] +Request.QueryString["num"].ToString();
                  DiskFileDestinationOptions DiskOpts = new DiskFileDestinationOptions();
                  ReportDocument ReportDoc = this.GetRD();
                  if(Session["DateFrom"]!=null)
                  {
                        ReportDoc.DataDefinition.ParameterFields["Period from"].ApplyCurrentValues(pvDF);
                  }
                  if(Session["DateTo"]!=null)
                  {
                        ReportDoc.DataDefinition.ParameterFields["Period to"].ApplyCurrentValues(pvDT);
                  }
                  ReportDoc.DataDefinition.ParameterFields["iprmCorporateName"].ApplyCurrentValues(pvCorporationName);
                  ReportDoc.DataDefinition.ParameterFields["hprmCompanyID"].ApplyCurrentValues(pvCompanyID);
                  ReportDoc.DataDefinition.ParameterFields["sprmDepartment"].ApplyCurrentValues(pvCCID);
                  ReportDoc.DataDefinition.ParameterFields["hprmUserID"].ApplyCurrentValues(pvUserID);
                  ReportDoc.DataDefinition.ParameterFields["hprmReportID"].ApplyCurrentValues(pvReportID);
                  ReportDoc.DataDefinition.ParameterFields["Type"].ApplyCurrentValues(pvType);
 
                  ReportDoc.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                  switch (ddlFormat.SelectedItem.Text)
                  {
                        case "Rich Text (RTF)":
                                   ReportDoc.ExportOptions.ExportFormatType = ExportFormatType.RichText;
                                   DiskOpts.DiskFileName = tempFileName + ".rtf";
                                    name = ".rtf";
                              break;
                        case "Portable Document (PDF)":
                                   ReportDoc.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                                   DiskOpts.DiskFileName = tempFileName + ".pdf";
                                    name = ".pdf";
                              break;
                        case "MS Word (DOC)":
                                   ReportDoc.ExportOptions.ExportFormatType = ExportFormatType.WordForWindows;
                                   DiskOpts.DiskFileName = tempFileName + ".doc";
                                    name = ".doc";
                              break;
                        case "MS Excel (XLS)":
                                   ReportDoc.ExportOptions.ExportFormatType = ExportFormatType.Excel;
                                   DiskOpts.DiskFileName = tempFileName + ".xls";
                                    name = ".xls";
                              break;
                        default:
                              break;
                  }
                  ReportDoc.ExportOptions.DestinationOptions = DiskOpts;
                  ReportDoc.Export();
 
                  Response.Write("<script>");
                  Response.Write("alert('Saved as   "+tempFileName.Replace("//","////")+" "+name+"')");
                  Response.Write("</script>");
 
//                      Response.Write("<script>");
//                      Response.Write("window.open('PDFContainer.aspx','_blank','height=50 resizable=1 width=100px top=50 left=50 scrollbars = 1',false);");
//                      Response.Write("</script>");
            }
      }
}
 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值