关于水晶报表的分页与打印在.NET程式中无效的解决方法.

大家在使用水晶报表时是否发现,在自己制作的模板中点击分页与打印的工具栏都是可以的,但是把加载到程式中却无法分页与打印呢?

经过测试发现其实是因为分页是从第一次加载的数据做为数据源来分页的.所以程式中想要分页与打印可用必须要缓存数据,才可以.(此仅我个人的理解,

如果有人知道欢迎指导.)

参考代码如下:

       写代码之前请先引用下面的命名空间

         using CrystalDecisions.CrystalReports.Engine;
         using CrystalDecisions.Shared;

       第一种如果你的资料已经固定.则可以直接在protected void Page_Init(object sender, EventArgs e)中定绑定资料即可.

    protected void Page_Init(object sender, EventArgs e)

    {   
            ReportDocument document = new ReportDocument();

            // 加载报表
            //   document.Load(Server.MapPath("querySiteCrystalReport.rpt"));  // 使用相对路径的方法

             document.Load(@"D:\mywebform\CRReport\CRreportFirst\CRReport\WebApplication1\sa030.rpt");

                    //设置数据源

            this.CrystalReportViewer1.ReportSource = document;
           

            // 将参数字段集合放入查看器控件。
            //this.CrystalReportViewer1.ParameterFieldInfo = paramFields;

            //定义连接信息

            TableLogOnInfo connectionInfo = new TableLogOnInfo();

            connectionInfo.ConnectionInfo.ServerName = "1**.1*.3.6";

            connectionInfo.ConnectionInfo.DatabaseName = "TEST";

            connectionInfo.ConnectionInfo.UserID = "sa";

            connectionInfo.ConnectionInfo.Password = "123";

            应用连接设置

            document.Database.Tables[0].ApplyLogOnInfo(connectionInfo);
          
            //数据绑定
           // CrystalReportViewer1.SelectionFormula = "{orderdate}=" + TextBox1.Text;
            this.CrystalReportViewer1.DataBind();
           // CrystalReportViewer1.RefreshReport();

            // 声明将参数传递给查看器控件所需的变量。

            ParameterFields paramFields = new ParameterFields();

            //声明参数

            ParameterField startDate = new ParameterField();

            ParameterField endDate = new ParameterField();

            //设置参数字段的名称,它必须和报表中的参数相符。

            startDate.Name = "startDate";

 

            //声明参数值

            ParameterDiscreteValue VstartDate = new ParameterDiscreteValue();

 

            //给参数赋值

            VstartDate.Value = TextBox1.Text;

 

            startDate.CurrentValues.Add(VstartDate);

 

            // 将该参数添加到参数字段集合。

            paramFields.Add(startDate);

 

            this.CrystalReportViewer1.ParameterFieldInfo = paramFields;
         }

       第二种如果你的条件是变化,则不可以只写在Page_Init中否则你的资料可以不会变化.

public  void Page_Load(object sender, EventArgs e)
        {
            //此處不寫則不能分頁|打印|導出
            if (Cache["customerReport"] != null)
            {
                CrystalReportViewer1.ReportSource = Cache["customerReport"];
                CrystalReportViewer1.DataBind();
            }
        } 

        protected void Button1_Click(object sender, EventArgs e)
        {
           
            ReportDocument document = new ReportDocument();

            // 加载报表
            //   document.Load(Server.MapPath("querySiteCrystalReport.rpt"));  // 使用相对路径的方法

             document.Load(@"D:\mywebform\CRReport\CRreportFirst\CRReport\WebApplication1\sa030.rpt");

            string selectFormula = "{sa030.orderdate} like '*" + TextBox1.Text + "*'";  

    //注意此处的LIKE查询与SQL的LIKE查询有点不一样啊,SQL中一般用%的匹配符,但是此处用*号,否则LIKE查询不出为数据啊!

            document.DataDefinition.RecordSelectionFormula = selectFormula;

            //设置数据源

            this.CrystalReportViewer1.ReportSource = document;
           

            // 将参数字段集合放入查看器控件。
            //this.CrystalReportViewer1.ParameterFieldInfo = paramFields;

            //定义连接信息

            TableLogOnInfo connectionInfo = new TableLogOnInfo();

            connectionInfo.ConnectionInfo.ServerName = "1**.1*.3.6";

            connectionInfo.ConnectionInfo.DatabaseName = "TEST";

            connectionInfo.ConnectionInfo.UserID = "sa";

            connectionInfo.ConnectionInfo.Password = "123";

            应用连接设置

            document.Database.Tables[0].ApplyLogOnInfo(connectionInfo);
          
            //数据绑定
           // CrystalReportViewer1.SelectionFormula = "{orderdate}=" + TextBox1.Text;
            this.CrystalReportViewer1.DataBind();
           // CrystalReportViewer1.RefreshReport();

            // 声明将参数传递给查看器控件所需的变量。

            ParameterFields paramFields = new ParameterFields();

            //声明参数

            ParameterField startDate = new ParameterField();

            ParameterField endDate = new ParameterField();

            //设置参数字段的名称,它必须和报表中的参数相符。

            startDate.Name = "startDate";

 

            //声明参数值

            ParameterDiscreteValue VstartDate = new ParameterDiscreteValue();

 

            //给参数赋值

            VstartDate.Value = TextBox1.Text;

 

            startDate.CurrentValues.Add(VstartDate);

 

            // 将该参数添加到参数字段集合。

            paramFields.Add(startDate);

 

            this.CrystalReportViewer1.ParameterFieldInfo = paramFields;
            Cache["customerReport"] = document;


        }

  另外请注意赋值报表中的参数写的位置,否则参数值不会根据你写的变化而变化.

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值