您的位置:首页 > 其它

使用ActiveReport .net3.0 实现web…

2014-03-14 21:38 330 查看
这篇文章是网络转载,最近做了一些关于activereport报表的项目,在BS的项目中实现打印的时候碰到一些问题:

 
1.在用activereport报表时,发布后必须在IIS上配置报表的格式等,我会再写一篇文章专门介绍这些。

  2.报表的显示方式有三种,HTML
格式在实现web打印的时候有问题。这个原因不明。但是我们可以选择用ActiveX格式来显示就可以实现web打印,下面的文章就是讲述如何使用active方式来实现web打印。

   
Web打印是比较麻烦的事情,一般打印控件都需要购买,价格也都不便宜。如果你做的项目小,很明显购买打印控件不是一件划算的事情。我最近帮朋友做了个小系统,需要实现web打印,开始下载了一个据说是破解的打印控件,安装的时候也有注册码,结果使用了三个月报表就不能打开了,真是郁闷啊!没有办法,只能重新做了,研究以后发现使用ActiveReport
for
.net来实现Web打印是非常方便的,为了方便注册我选用了5.1.0.158版本。在使用过程中出现了一些小问题,现在把它记录下来,希望能够给碰到同样问题的朋友做参考。

一、报错“在位置N处没有任何行”

    
这个问题是最郁闷的,困扰了我一下午。当绑定数据的时候如果同时绑定reportheader,detail,reportfooter预览的时候就会报“在位置N处没有任何行”的错误,把detail部分换为子报表也不行,最后发现要把reportfooter需要绑定的字段复制粘贴到reportherder里面(设置为隐藏)问题就解决了,例如:在reportfooter里有制单人、制单时间需要绑定,那么就把这两个textBox复制粘贴到reportheader里,OK!问题解决。不知道这是什么原因,估计是ActiveReport
for .net本身的BUG把。截图如下:





二、“一主多从”的显示

     
在报表打印中很多情况下都需要显示主从表,还有的时候需要显示一个主表多个从表。一主一从的情况可以直接把从表内容放到detail里,需要显示多个从表的时候就需要使用子报表subReport了,subReport很好用,它能方便的实现从表数据的绑定,使用方法是直接在工具箱中拖放一个subReport到需要显示从表的地方,新建一个空白报表来制作从表。主报表BalanceReport.cs如下:



      
维修项目从表BalanceItemSub.cs:

 


       
维修配件从表BalancePartSub.cs:



       
最终效果:



一般的在主报表ReportHeader_Format事件中添加后台代码,代码如下:


        ActiveReport3 sub = null;


        ActiveReport3 sub1 = null;


        private void ReportHeader_Format(object sender, EventArgs e)




        

{


            BalanceBillBL objBL = new BalanceBillBL();


            int iBalanceID = (int)StringUtil.GetValidateData(TypeCode.Int32, this.BALANCE_BILL_ID.Value);//在主表上获取记录ID


            sub = new Report.Balance.BalanceItemSub();


            DataSet ds = new DataSet();


            int iCount = objBL.GetBalaanceReportItemSubDS(ds, iBalanceID);


            sub.DataSource = ds;


            sub.DataMember = ds.Tables[0].TableName;


            DisposeDsBeforeBind(ds);


            this.subRepair.Report = sub;//指定维修项目从表




            sub1 = new Report.Balance.BalancePartSub();


            DataSet ds1 = new DataSet();


            int iCount1 = objBL.GetBalaanceReportTestSubDS(ds1, iBalanceID);


            sub1.DataSource = ds1;


            sub1.DataMember = ds1.Tables[0].TableName;


            DisposeDsBeforeBindPart(ds1);


            this.subPart.Report = sub1;//指定维修配件从表


        }
三、发布到服务器

    开发完成以后需要发布到服务器,在服务器上安装ActiveReport for
.net以后需要设置IIS(添加.rpx,.ActiveReport,.ArCacheItem应用程序配置项),如何设置IIS我在这就不说了,网上可以查到。如果已经设置了IIS虚拟目录,在配置了应用程序配置项以后需要删除原来的虚拟目录重新建,否则报表也不能显示。另外注意:如果是在后台代码中调用打印页面需要指定arview2.cab的路径,不然打印预览的时候不会提示下载控件。代码如下:


 protected void Page_Load(object sender, EventArgs e)




        

{


            if (!IsPostBack)




            




                int iBillID =(int)StringUtil.GetValidateData(TypeCode.Int32,base.GetQueryString("BillID", ""));




                DataSet ds = new DataSet();


                BalanceBillBL objBL = new BalanceBillBL();


                int iCount = objBL.GetBalaanceReportTestDS(ds, iBillID);


                DisposeDsBeforeBind(ds,iBillID);


                WebViewer1.Report = new Report.Balance.BalanceReport();//实例化主报表


                WebViewer1.Report.DataSource = ds;


                WebViewer1.Report.DataMember = ds.Tables[0].TableName;


                WebViewer1.ViewerType = DataDynamics.ActiveReports.Web.ViewerType.AcrobatReader;


                WebViewer1.CodeBase = "../Lib/arview2.cab";//如果少了这行代码,发布以后就不会提示下载控件,朋友们可别忘记了,在页面调用的话也需要指定   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
//arview2.cab路径。


            }


            


        }

     
今天就先写到这里把,以后我会继续关注ActiveReport for
.net使用中碰到的问题,并把它记录下来。朋友们有什么问题也可以提出来一起来讨论!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: