题记:

最近有在用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. C#的百度地图开发(一)发起HTTP请求

    原文:C#的百度地图开发(一)发起HTTP请求 百度地图的开发文档中给出了很多的事例,而当用到具体的语言来开发时,又会有些差异.我是使用C#来开发的.在获取相应的数据时,需要通过URL传值,然后获取相 ...

  2. SQL Server 2008备份数据库失败,拒绝访问的原因

    原文:SQL Server 2008备份数据库失败,拒绝访问的原因 备份数据到特定目录是出现拒绝访问,然后测试备份到C盘根目录正常. 查了下原因: 是因为那个目录没有Authenticated Use ...

  3. uvalive 2088 - Entropy(huffman编码)

    题目连接:2088 - Entropy 题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的 ...

  4. WPF换肤之四:界面设计和代码设计分离

    原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...

  5. uvalive4015 (树上背包)

    给一棵树,边上有权值,然后给一个权值x,问从根结点出发, 走不超过x的距离,最多能经过多少个结点. 走过的点可以重复走,所以可以从一个分支走下去,然后走回来,然后再走另一个分支 dp[u][j][0] ...

  6. UML 之 序列图和协作图

    序列图(Sequence Diagram)     亦称为时序图或循序图,是一种UML行为图.它通过描写叙述对象之间发送消息的时间顺序显示多个对象之间的动态协作.它能够表示用例的行为顺序,当运行一个用 ...

  7. iOS随机颜色

    #import <UIKit/UIKit.h> @interface UIColor (RandomColor) +(UIColor *) randomColor; @end #impor ...

  8. hdu2544(自己实现优先队列)

    hdu2544  dij水题,用来测试自己实现优先队列对不对 #include <stdio.h> #include <string.h> #include <stdli ...

  9. Phoenix Framework对于Tree该方法节点设置不同的图标,每个

    在包Javax Swing的Tree对象.我们需要设置不同的图标为每个节点.它封装了一个通用的方法: 用法: jTree1.setCellRenderer(new TreeNodeRender(cas ...

  10. CentOS6.5解压缩文件.tar.gz .war .zip

    拉开拉链.tar.gz文件: tar -zxvf web.tar.gz tar将文件解压缩到一个指定的文件夹. 拉开拉链.war .zip文件到指定的文件夹: unzip web.war -d web ...