使用ActiveReport .net3.0 实现web…

来源:互联网 发布:域名和ip反向解析 编辑:程序博客网 时间:2024/05/23 01:54

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

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

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

   Web打印是比较麻烦的事情,一般打印控件都需要购买,价格也都不便宜。如果你做的项目小,很明显购买打印控件不是一件划算的事情。我最近帮朋友做了个小系统,需要实现web打印,开始下载了一个据说是破解的打印控件,安装的时候也有注册码,结果使用了三个月报表就不能打开了,真是郁闷啊!没有办法,只能重新做了,研究以后发现使用ActiveReportfor.net来实现Web打印是非常方便的,为了方便注册我选用了5.1.0.158版本。在使用过程中出现了一些小问题,现在把它记录下来,希望能够给碰到同样问题的朋友做参考。
一、报错“在位置N处没有任何行”
    这个问题是最郁闷的,困扰了我一下午。当绑定数据的时候如果同时绑定reportheader,detail,reportfooter预览的时候就会报“在位置N处没有任何行”的错误,把detail部分换为子报表也不行,最后发现要把reportfooter需要绑定的字段复制粘贴到reportherder里面(设置为隐藏)问题就解决了,例如:在reportfooter里有制单人、制单时间需要绑定,那么就把这两个textBox复制粘贴到reportheader里,OK!问题解决。不知道这是什么原因,估计是ActiveReportfor .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使用中碰到的问题,并把它记录下来。朋友们有什么问题也可以提出来一起来讨论!
0 0
原创粉丝点击