VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • ASP.net教程之B/S FastReprot使用

FastReport 交流群

554714044

前言

由于公司开发新产品,前后端分离.netcore +Angular ,之前C/S项目一直使用FastReport ,考虑到员工切换比较困难,而且最最重要的是BS版少了很多内容,例如合计,函数最常用的功能都没有,所以B/S端打印控件继续沿用C/S模式。

 

一、逻辑视图

 

二、具体实现

1.Winform设计

如上图所示,这里做了一个打印模板与数据源的管理。在这里可以指定具体页面要调什么后端接口,打印什么数据,打印格式设计。全部WinForm实现。将数据源与打印格式模板存储到数据库。后端直接调取即可。

优点:1.与之前WinForm版无缝对接,开发人员不用学习即可使用。

2.做到数据源与打印格式集中化管理,而且可以根据客户需求,实施人员自己调整添加打印格式,不需要开发程序。

3.数据源多样化,可以根据特殊需求,自己拼接sql,也可以直接查询数据库表。满足客户多样化,个性化需求。

4.可以根据具体单据ID,调试打印格式。

缺点:WinForm 没有做成网络版,此设计器只能在服务器端(内网)使用。(本来设计就是要服务器设计,下面的人员用不到,缺点还可以接受

以下是部分代码

 View Code

 

 

  2.MVC端

为了将打印格式发布出去,这里特意做了一个mvc的程序,放在前端与后端之间,作为桥梁。

因为客户端只需要预览和打印,所以这里我只做了一个预览+打印的接口。设计在WinForm端处理,这里不需要。

以下是Preview的代码实现。

 View Code

其中以下几点是我做了特殊化的设置

webReport.ToolbarStyle = ToolbarStyle.Small; //将原先的图标变小(太大太难看了)
webReport.ToolbarIconsStyle = ToolbarIconsStyle.Blue;
webReport.ToolbarBackgroundStyle = ToolbarBackgroundStyle.Custom;

(下拉菜单的汉化还没有找到,需要研究一下。)
webReport.PreviewMode = true;//预览模式
webReport.PrintInPdf = true;//在PDF打印

 

这里就是对接前端的打印接口。前端只需要调取我发布的网址,并且把我需要的参数(数据ID,打印模板ID,token传送给我即可。)

3.后端

后端接口主要是实现根据MVC端传送过来的打印模板ID,将数据源和模板传送给MVC端。由MVC端进行拼接组装。

主要代码如下:

 

 

复制代码
  1         public List<ReportDataSource> GetDataSource(ReportModel entitydto)
  2         {
  3             try
  4             {
  5                 List<ReportDataSource> lst = new List<ReportDataSource>();
  6                 IDBTransAccess sqlTrans = TransSysUtils.GetDBTransAccess();
  7                 try
  8                 {
  9                     sqlTrans.OpenTrans();
 10 
 11                     lst = this.GetDataSource(entitydto, sqlTrans);
 12 
 13 
 14                     sqlTrans.CommitTrans();
 15                     return lst;
 16                 }
 17                 catch (Exception TE)
 18                 {
 19                     sqlTrans.RollbackTrans();
 20                     throw TE;
 21                 }
 22             }
 23             catch (BaseException)
 24             {
 25                 throw;
 26             }
 27             catch (Exception E)
 28             {
 29                 throw new BaseException(E.Message);
 30             }
 31         }
 32 
 33 
 34         public List<ReportDataSource> GetDataSource(ReportModel entitydto, IDBTransAccess sqlTrans)
 35         {
 36             try
 37             {
 38                 List<ReportDataSource> lst = ReportRun(entitydto.ReportID, new string[] { "DID","DMainID" }, new string[] { entitydto.DataID,entitydto.DataID }, sqlTrans);
 39                 
 40                 return lst;
 41 
 42             }
 43             catch (BaseException)
 44             {
 45                 throw;
 46             }
 47             catch (Exception E)
 48             {
 49                 throw new BaseException(E.Message);
 50             }
 51         }
 52 
 53 
 54 
 55 
 56 
 57 
 58        
 59 
 60 
 61         #endregion
 62 
 63 
 64         public List<ReportDataSource> ReportRun(string reportID, string[] queryName, string[] queryValue, IDBTransAccess sqlTrans)
 65         {
 66             List<ReportDataSource> lst = new List<ReportDataSource>();
 67             string sql = "Select * from Data_SReportManageDts where DMainID=" + SysString.ToDBString(reportID);
 68             DataTable dtSource = sqlTrans.Fill(sql);
 69             if (dtSource.Rows.Count > 0)
 70             {
 71                 foreach (DataRow dr in dtSource.Rows)
 72                 {
 73                     bool findSource = false;
 74                     string conditionStr = string.Empty;
 75                     if (SysConvert.ToInt32(dr["SqlFlag"]) == 0)
 76                     {
 77                         string[] tempA = dr["QueryName"].ToString().Split(' ');
 78                         for (int q = 0; q < queryName.Length; q++)
 79                         {
 80                             for (int fi = 0; fi < tempA.Length; fi++)
 81                             {
 82                                 if (queryName[q].ToString().ToUpper() == tempA[fi].ToUpper())
 83                                 {
 84                                     if (conditionStr != string.Empty)
 85                                     {
 86                                         conditionStr += " AND ";
 87                                     }
 88                                     conditionStr += queryName[q].ToString() + "=" + SysString.ToDBString(queryValue[q]);
 89                                     findSource = true;
 90                                     break;
 91                                 }
 92                             }
 93 
 94                         }
 95                     }
 96                     else
 97                     {
 98                         conditionStr = SysConvert.ToString(dr["QueryName"]).ToUpper();
 99                         for (int i = 0; i < queryName.Length; i++)
100                         {
101                             string queryStr = "{" + queryName[i].ToUpper() + "}";
102 
103                             conditionStr = conditionStr.Replace(queryStr, SysString.ToDBString(queryValue[i]));
104                         }
105                         if (conditionStr.Contains("{") || conditionStr.Contains("}"))
106                         {
107                             findSource = false;
108                         }
109                         else
110                         {
111                             findSource = true;
112                         }
113                     }
114                     if (findSource)
115                     {
116 
117                         if (SysConvert.ToInt32(dr["SqlFlag"]) == 0)
118                         {
119 
120                             sql = "select * from (" + dr["SqlStr"].ToString() + ") a where " + conditionStr;
121                         }
122                         else
123                         {
124 
125                             sql = dr["SqlStr"].ToString() + " " + conditionStr;
126                         }
127                         DataTable dt = sqlTrans.Fill(sql);
128 
129                         ReportDataSource source = new ReportDataSource();
130                         source.dtsource = dt;
131                         source.TBName = dr["SqlName"].ToString();
132                         lst.Add(source);
133 
134 
135                     }
136                     else
137                     {
138                         if (dr["SqlStr"].ToString() != string.Empty)
139                         {
140                             sql = dr["SqlStr"].ToString();
141                             DataTable dt = sqlTrans.Fill(sql);
142 
143                             ReportDataSource source = new ReportDataSource();
144                             source.dtsource = dt;
145                             source.TBName = dr["SqlName"].ToString();
146                             lst.Add(source);
147 
148                         }
149                     }
150                 }
151             }
152 
153             return lst;
154         }
复制代码

 

 


相关教程