题记:

最近有在用FastReport进行开发报表工作,当然也有在看书,突然想到可以用书中所写来实现一个fastreport的帮助类。

对于引用第三方类库,我们都会去将这个库在调用前进行相应的封装,也就是所谓的程序提供者模式。对第三方进行封装,当需要改变第三方(使用”第四方“的时候)不会影响到我们先前的实现,只需在程序提供处进行处理就好了。

好了,废话不多说,直接上些干活来:

一、定义基本的实现类

  public class FastReportHelper
{
public FastReport.Report report = null;
public FastReport.Report MReport
{
get
{
return report;
}
set
{
report = value;
}
} public FastReportHelper(string templateFile, string printerName, FastReport.Preview.PreviewControl pc)
{
if (string.IsNullOrEmpty(templateFile))
{
throw new ArgumentNullException("报表模板不能为空!");
}
if (!File.Exists(templateFile))
{
throw new FileNotFoundException(string.Format("报表模板“{0}”不存在!", templateFile));
}
if (!string.IsNullOrEmpty(printerName) && !PrinterInfo.ValidatePrinterIsExist(printerName))
{
throw new Exception(string.Format("打印机“{0}”不存在!"));
}
if (pc != null)
{
report.Preview = pc;
}
report = new FastReport.Report();
report.Load(templateFile);
}
public void Show()
{
if (report != null)
{
report.Prepare();
report.ShowPrepared();
}
}
public void Print()
{
if (report != null)
{ report.PrintPrepared();
report.Print();
}
}
public void Print(PrinterSettings printSettings)
{
if (report != null)
{
this.report.PrintPrepared(printSettings);
this.report.Print();
} }
}

打印所需一般就分为:1、模板;2、数据源、3、打印设置,当然上面的类没有实现打印几份,单面打印还是双面打印等,所以均为默认。如果问我为毛这么写,那么请看下面

二、对基本的实现类进行扩展,从而在调用的时候实现链式编程。

  public static class FastReportExtend
{
public static FastReportHelper RegesterData(this FastReportHelper fastReportHelper, DataSet ds)
{
for (int i = ; i < ds.Tables.Count; i++)
{
fastReportHelper.MReport.RegisterData(ds.Tables[], ds.Tables[].TableName);
} return fastReportHelper;
}
public static FastReportHelper RegesterData(this FastReportHelper fastReportHelper, IEnumerable<object> data, string dataName)
{
fastReportHelper.report.RegisterData(data, dataName);
return fastReportHelper;
}
public static FastReportHelper RegesterData(this FastReportHelper fastReportHelper, DataTable dt, string dtName = "")
{
string name = string.IsNullOrEmpty(dtName) ? dt.TableName : dtName;
fastReportHelper.report.RegisterData(dt, name);
return fastReportHelper;
}
public static FastReportHelper SetParameters(this FastReportHelper fastReportHelper, Dictionary<string, object> dicParameters)
{
if (dicParameters != null || dicParameters.Count > )
{
foreach (KeyValuePair<string, object> item in dicParameters)
{
fastReportHelper.report.SetParameterValue(item.Key, item.Value);
}
}
return fastReportHelper;
}
public static FastReport.Report SetParameters(this FastReport.Report report, Dictionary<string, object> dicParameters)
{
if (dicParameters != null || dicParameters.Count > )
{
foreach (KeyValuePair<string, object> item in dicParameters)
{
report.SetParameterValue(item.Key, item.Value);
}
}
return report;
} }

最后、打印机的获取

 /// <summary>
///
/// </summary>
public class PrinterInfo
{
/// <summary>
/// 判断打印机是否存在
/// </summary>
/// <param name="printerName"></param>
/// <returns></returns>
public static bool ValidatePrinterIsExist(string printerName)
{
foreach (var item in PrinterSettings.InstalledPrinters)
{
if (item == printerName)
return true;
}
return false;
}
/// <summary>
/// 获取默认打印机名称
/// </summary>
/// <returns></returns>
public static string GetDefaultPrinter()
{
return new PrintDocument().PrinterSettings.PrinterName;
}
}

乱来一通,最近在搞vb.net,想屎的心都有了。

洗洗睡吧。

FastReport扩展类的更多相关文章

  1. C# 扩展类

    C# 中提供一个非常实用的供能,扩展方法(Extension method) 扩展方法是通过额外的静态方法扩展现有的类型.通过扩展方法,可以对已有类型做自己想做的相关扩展.方法:定义静态类,扩展方法也 ...

  2. tp中调用PHP系统扩展类

    例如使用Redis扩展类: use Reids; $redis = new Redis();

  3. Java+7入门经典 - 6 扩展类与继承 Part 1/2

    第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...

  4. Thinkphp编辑器扩展类kindeditor用法

    一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...

  5. 扩展javascript扩展(类,对象,原型)

     扩展javascript扩展(类,对象,原型)

  6. 颜色扩展类--ColorExtensions

    /// <summary> /// 颜色扩展类 /// </summary> public static class ColorExtensions { /// <sum ...

  7. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

    文章转载自:https://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PH ...

  8. ASP.NET MVC4 HtmlHelper扩展类,实现分页功能 @Html.ShowPageNavigate

    本文主要做了一个HtmHelper类的分页扩展函数,方便在视图中调用,有需要的朋友可以参考一下,希望对大家有所帮助. 1.扩展HtmlHelper类方法ShowPageNavigate output. ...

  9. C#操作Xml树的扩展类

    本文提供一个操作Xml树的扩展类,与将xml字符串直接映射成实体对象的使用方法,供大家参考,学习. 下面附上源码 using System; using System.Collections.Gene ...

随机推荐

  1. 使用NFS安装oracle软件

    昨天.使用openfiler创建nas存储系统,安装oracle软件,在所有正面最好,要创建一个数据库时报ora错,原来使用nfs安装oracle数据库,mount选项有特殊要求,如以下.以备查: R ...

  2. SVN的命令行操作

    最近在进行svn二次开发,使用的是svnkit.看了很多svnkit的api,渐渐发现都是和SVN的命令行操作对应的.顺便研究一下svn的命名行操作. 1.将文件checkout到本地目录: 基本命令 ...

  3. HttpMime 处理 多部件 POST 请求

    HttpMime 处理 多部件 POST 请求 在有的场合例如我们要用到上传文件的时候,就不能使用基本的GET请求和POST 请求了,我们要使用多部件的POST请求.由于Android 附带的 Htt ...

  4. HDU 4643 GSM 暑期多校联合训练第五场 1001

    点击打开链接 我就不说官方题解有多坑了 V图那么高端的玩意儿 被精度坑粗翔了 AC前 AC后 简直不敢相信 只能怪自己没注意题目For the distance d1 and d2, if fabs( ...

  5. WordPress更改固定链接出现404的解决方案

    很多站长在玩WordPress的时候,可能会碰到一个问题,就是想把WordPress伪静态,在后台设置好固定链接之后,就会出现文章页面或者所有的页面都出现404错误.解决方法如下: 1,.htacce ...

  6. 聊天demo SignalR

    1首先这个demo是针对 net版本是4.5的  SignalR   获取的是2.2的 2新建一个mvc项目 3  Nuget  搜索 SignalR   安装如图的一项 4新建一个 集线器类 修改新 ...

  7. SpringMVC(转)

    http://www.cnblogs.com/liukemng/p/3725582.html

  8. Xamarin 手动安装步骤+破解

    原文:Xamarin 手动安装步骤+破解 由于Xamarin运行的时候有很多依赖项,所以现在在官网上下载的XamarinInstall只是一个下载安装器,并不是软件包.它会自动下载安装所需的依赖软件, ...

  9. 【安德鲁斯】基于脚本的数据库&quot;增量更新&quot;,如果不改变,每次更新java代码、!

    思维: 1.当然,它是基于SQLiteOpenHelper.onCreate(第一个呼叫建立).onUpdate(当所谓的升级计划) 2.用"脚本"(脚本制作详细方法问度娘)做数据 ...

  10. Android在发送带有附件的邮件

    准备好工作了-下载最新的版本号JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release h ...