C#之二十三 打印和水晶报表

简介: C#之二十三 打印和水晶报表

视频课堂https://edu.csdn.net/course/play/7621

C#程序设计及宿舍管理系统实战

https://edu.csdn.net/course/detail/27107

打印组件介绍

打印是常用的的功能,打印的原理从本质上和Windows窗体画图的原理是一样的,你在窗体里面画了一个圆,那么同样的代码,打印机也会在纸张的同一个位置打印了出一个圆,它们所不同的就是输出终端而已,下面让我们先来看一下关于打印的一些类。


1、PrintDocument类


PrintDocument组件用于设置一些属性,这些属性说明在基于Windows操作系统的应用程序中要打印什么内容以及打印文档的能力,可将它与PrintDialog组件一起使用来控制文档打印的各个方面,PrintDocument是最重的Windows打印对象,负责建立和其它打印对象的联系,该组件的常用属性及方法如下:


2、PrintPreviewDialog组件常用属性及方法

属性及方法

说明

DefalultPageSetting(属性)

获取或设置页设置,这些页设置用作打印的所有页的默认设置

DocumentName(属性)

获取或废置打印文档时要显示的文档

OriginAtMargins(属性)

获取或设置 一个值该值批示与页关联的图形对象的位置是位于用户指定边距内还是位于该页可打印区域的左上角

PrintController(属性)

获取或设置指导打印进程的打印控制器

PrintSetting(属性)

获取或设置对文档进行打印的打印机

Print(方法)

开始文档的打印进程

PrintPreviewDialog组件预先配置的对话框,用于显示PrintDocument组件在打印时的外观。该组件的常用属性及方法如下:

属性及方法

说明

Document(属性)

获取或设置要预览的文档

UseAntiAlia(属性)

获取或设置一个值,该值批示打印是否使用操作系统的防锯齿功能

ShowDialog(方法)

显示“打印预览“窗口

3、PrintDialog组件常用属性及方法:

属性及方法

说明

AllowCurentpage(属性)

获取或调协一个值,该值指示是否显示 “当前页“选项按钮

AllowPrintToFile(属性)

获取或设置一个值,该值指示是否启用“打印到文件“复选框

AllowSelection(属性)

获取或设置一个值,该值指示是否启用“页“选项按钮

Document(属性)

获获取或设置一个值,指示用于获取PrinterSetting类的PrintDocument对象

PrintertSetting(属性)

获取或设置

AllowSomePage(属性)

获取或设置一个值,该值指示是否启用“选择“选项按钮

PrintToFile(属性)

获取或设置一个值,该值批示是否选中“打印到文件“复选框

Reset(属性)

将所有选项,最后待定的打印机和页面设置重新设置为其           默认值

ShowDialog(方法)

显示“打印“对话框

实现过程

 

1、新建一个Windows应用程序,将其命名为Excell-01,默认主窗体Forml

2、Forml窗体设计时主要用到的控件及说明如下:

控件类型

 控件名称

用途

TextBox

TxetBox1

TxetBox2

TxetBox3

输入员工姓名

输入员工据部门

输入员工担任职位

Button

Button1

执行打印操作

PrintDocument

PrintDocument1

设置要打印的文档

PrintPreviewDialog

PrintPreviewDialog1

显示“打印预览“窗口

PrintDialog

PrintDialog1

显示“打印“窗口

 

主要程序代码:

Private void printDocument1_PrintPage((objectsender,System.Drawing.PrintPageEventArgs e)


{


e.Graphiscs.DrawString(label.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


e. e.Graphiscs.DrawString(textBox1.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


e.Graphiscs.DrawString(label2.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


e.Graphiscs.DrawString(textBox2.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


e.Graphiscs.DrawString(label3.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


e.Graphiscs.DrawString(textBox3.Text,new Font(“宋体”,10,FontStyle.Regular),Brushes.Brushes.Black,260,4000);


}

水晶报表的简介

 

水晶报表(Crystal Reprots)是加拿大Crysttal Decisions公司出品的专业级报表分析与生成软件,在全球经书拥有超过1100万用户.水晶报表及水晶报表企业版等软件可以与Visual Basic,Visual Studio.NET,ASP以及Java程序开发环境等平台实现完美的集成.目前水晶报表组件经书捆绑在了Visual Studio.NET系列开发工具当中,通过Visual Studio学习2005可以轻松创建和设计水晶报表.水晶报表具有非常强大的功能 ,不仅可以生成复杂.漂亮的图表报表,还可以将报表导出成Word,Excel,RTE,HTML等格式,是进行Web和Windows报表 开发的必备知识.与其他报表相比,水晶报表软件具有高稳定性,高可伸缩性以及应用平台广泛等杰出优点,水晶报表几乎可以从任何数据源中生成你需要的报表.内置报表专家在你生成和完成一般的报表任务过程中,会一步一步地指导你进行了操作.报表专家通过公式,交叉表,子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏的重要关系.如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息输出。


将报表扩展到Web水晶报表的灵活性并未停留创建报表这一功能上.你可以用各种各的格式发布报表,包括用微软的Word和Excel发布,通过电子邮件甚Web报表功能允许工作组中的其他成员在他们自己的Web浏览器中查看或更新共享报表。


通过将水晶报表的报表处理功能不听整合到自己的数据库应用程序中,应用程序和Web开发人员可以节省开发时间并满足用户的需求。水晶报表支持大多数流行的开发语言。可以方便地在任何应用程序中添加 报表。不论你是IT行业的站点管理员,还是营销推广经理,也无论你是金融业的数据库管理员还是CEO,水晶报表都堪称是一个功能强大的工具,它可以帮助每一个人分析,解释重要数据。


在Visual Studio 2005中系统为创建水晶报表提供了三件法定:一个是名叫CrystalReportViewer的报表查看控件,一个是ReportDocument,另外一个是水晶报表专家|(实际上Visual Studio 2005附带两个版本的CrystalReportViewer控件:一个用于Web应用程序,一个用于Windows应用程序,位于CrystalDecisions.Windows.Forms命名空间内的CrystalReportViewer控件由Windows项目使用),其中前两个都可以在工具箱的“Crystal Reports”的卡片中找到,报表专家需要你点击项目菜单中的“添加新项”命令创建。


其中CrystalReportViewer控件就是一个显示控件,可以让你把报表显示基于页面的布局中:ReportDocument控件表示一个报表 ,它包含定义,格式化加裁,导出 和打印报表的属性和方法:报表专家是一个帮助你建立报表数据源的向导,它含有一系列向导对话框。

快速建立水晶报表—创建一个学生信息报表

我们首先建立 一个简单的水晶报表的示例,让你对报表有一个概念。这个报表将对一个学生表进行报表。要建立一个水晶报表,需要用到.NET为我们提供的CrystalReportViewer和ReportDocument控件以及报表专家。首先你需要用报表专家一个数据源,然后将这个数据源提供纵给ReportDocument控件,最后只要把RerportDocument绑定到CrystalReportViewer即可。它们的关系如下:


 


下面我们就来建立水晶报表,步骤


(1)      新建一个Windows应用程序,将其命名为Exll-02,默认主窗体为Forml,


(2)      在Forml窗体中添加一个CyrstalReportViewer控件,用来查看报表,


(3)       选中当前项目上,单击右键,在弹出的快捷菜单中,选择“添加“/”新建项“选项,在弹出的”添加新项“对话框中选择”Crystal报表“


(4)       单击“确定“按钮,新建一个报表并打开图所示”Crystal库“对话框,该对话框中,在”创建新Crystal Report 文档“中选择”使用报表向导“选项,并”选择专家“中的”标准“选项



(5)       单击“确定“按钮,打开”标准报表创建向导“对话框,如图所示。该对话框用来选择和配置数据源,如果项目中存在数据源,则在”可用数据源“中选择”项目数据“项,并从选择合适的数据源,如果没有数据源,可以新建一个数据源,本实例以SQL Server 2005为例。



(6)       选择“可用数据源“中“创建新连接”下的OLEDB(ADO)命令打开对话框,选定数据源后,单击“下一步“按钮,在界面中填写正确的数据库连接信息,单击”下一步“按钮,进入高级信息编辑界面,可以通过双击或选择需要编辑的项,单击”编辑值“按钮进行适当的编辑,编辑完成后,单击”完成“按钮即可完成新连接的创建,如图所示。




(7)       从已创建连接的“标准报表创建向导“中选择合适的数据表作为数据源,选择数据表,通过相左或相右的按钮,对选定的数据表进行单一添加或移除,如图所示。也可以利用<Ctrl+数据表>快捷键选择多个数据表进行添加和移除。



(8)       选定数据表后,,单击“下一步“按钮,出现报表字段选择界面,如图所示 在报表字段选择界面中需要在报表中显示的字段,单击”下一步“按钮,进入报表分组界面,用户可以选择合适的字段对数据进行分组,也可以不对字段分组,本实例无分组字段,如图所示。




(9)       选定完成后,单击“下一步“按钮,即可出现记录选定界面,用户可以通过筛选字段来控制输出结果,如图所示。



(10)   完成以上步骤后,最后一项就是为报表选择样式了,报表专家为用户提供了10种可选样式供用户筢,用户可以选择自己喜欢的样式来显示报表数据。本实例选择可选样式中的“标准“样式,如图所示 。单击”完成“按钮,完成报表设计。

调用Office进行打印

在程序中查看一些信息资料时,经常需要将这些资料通过Word文档或Excel格式打印出来,那么如何在Windows应用程序中使用这些Office组件呢?本节将通过 两个具体实例介绍如何将Windows窗体中的内容以Word文档或Excels格式显示打印出来。


1           利用Word打印员工报表


Microsoft Word 是微软公司提供的文档处理软件,在处理文档和资料的过程中显示出了强大的功能。本实例在打印某企业的员工信息时,实现了通过将数据导入到Word文档中进行打印的功能。运行本实例,如图所示,单击“输出Word“按钮,DataGridView控件中的数据便以Word文档方式打开。




技术要点


本实例通过使用Microsoft Word自动化对象模型中的Cell对象 ,将DataGRIDview控件中的数据导出到Word文档表格中。


在Microsoft Word自动化对象模型中,Tables集合中是同Table对象组成的集合,这些对象代表选定内容,范围或文档中的表格。Table对象 的Cell对象 代表表格中的单个单元格,Cell对象是Cells集合中的元素,Cells集合中指定对象中所有的单元格。本实例中主要用到了Cell对象 的InsertAfter(方法)。


InsertAter()方法用来将指定文本插入某区域或选定内容的后面,其使用语法格式如下:


public void InsertAfter(string Text)


参数说明如下


Text:要插入的文本



实现过程

(1)     新建一个Windows应用程序,将其命名为Exll-03,默认主窗体为Forml;


(2)     在Forml窗体中添加一个DataGridView控件和一个Button控件,其中,DataGridView控件用来显示数据库中的记录,Button控件用来将DataGridView控件中的数据以Word文档格式输出;


(3)     主要程序代码,在DataGridView控件中显示数据的实现代码如下:


private void Form1_Load(objectsender,EventArg P s e)


{


           Myda = new SqlDataAdapter("select* from studentinfor", sqlcon);


           Myds = new DataSet();


           sqlcon.Open();


           Myda.Fill(Myds);


           sqlcon.Close();


           dataGridView1.DataSource= Myds.Tables[0];


}


“输出Word”按钮的Click事件实现代码如下:


private void button1_Click(objectsender,EventArgs e)


{


    ExportDataGridview(dataGridView1, true);


}


自定交方法ExportDataGridview()用来实现将DataGridView控件中数据导出到Word,该方法主要代码如下:


   public bool ExportDataGridview(DataGridView dgv,bool isShowWord)


       {


          Word.Document mydoc = newWord.Document();


          Word.Table mytabel;


          Word.Selection  myself;


           object myobj;



           if (dgv.Rows.Count == 0)


               return false;


          Word.Application word = newWord.Application();


           myobj = System.Reflection.Missing.Value;


           mydoc= word.Documents.Add(ref myobj,ref myobj, ref myobj,ref myobj);


          word.Visible = isShowWord;


          mydoc.Select();


          myself = word.Selection;


          mytabel = mydoc.Tables.Add(myself.Range, dgv.RowCount, dgv.ColumnCount,ref myobj,ref myobj);


          mytabel.Columns.SetWidth(30, Word.WdRulerStyle.wdAdjustNone);


           for (int i = 0; i< dgv.ColumnCount; i++)


           {


              mytabel.Cell(1, i + 1).Range.InsertAfter(dgv.Columns[i].HeaderText);


           }


           for (int i = 0; i< dgv.RowCount - 1; i++)


           {


               for (int j = 0;j<dgv.ColumnCount; j++)


               {


                  mytabel.Cell(i + 2, j + 1).Range.InsertAfter(dgv[j,i].Value.ToString()); ;


               }


           }


           return true;


      }


}


注意:在程序中对Word进行操作控制时,需要引用Word动态链接库(Mircorsoft Word9.0 ObjectLibray),添加方法如下:选中当前项目,单击右键,选择“添加引用”选项,在弹出的“添加引用“对话框中选择”COM“选项卡,然后找到要引用的Word动态链接库,单击“确定”按钮即可。


Microsoft  Excel是微软公司提供的用于办公的应用软件,具有强大的报表统计等功能。本实例在打印学生信息时,通过将数据导入到Excel 文件中进行打印。运行本实例,如图(1)所示:单击[输出Excel]按钮,DataGridView控件中的数据便以Excel 文件方式打开,如图(2)所示,然后用户可以用Excel 自带的打印功能对学生信息进行打印。



(1)


                                   



(2)输出的Excel报表


技术要点:


本实例中首先调用MicrosoftExcel自动化对象模型的Workbooks对象的Add()方法创建一个新的工作薄,然后通过设置Excel对象的Cells属性,向新建的工作薄中添加数据记录。下面对Workbooks对象的Add()方法和Excel对象Cells属性进行详细介绍。


(1)Workbooks对象的Add()方法


该方法主要用来创建一个新的工作薄,其使用语法格式如下:

 Workbook Add([In,Optional]object Template)

参数说明如下:

 

Template:指定是否添加工作薄,如果为True ,表示添加;否则,表示不添加。

返回值:返回Workbook类型,表示一个Excel工作薄。

(2)Excel对象的Cell属性


 

Excel.Cells[0,0]=”Excel”;

 该属性用来指定Excel工作薄中单元格的内容。例如,下面的代码用来指定Excel工作薄中第一行第一列的单元格中的内容为“Excel”:

 

实现过程:



(1)             新建一个Windows应用程序,默认主窗体为Form1.


(2)             在Form1窗体中添加一个DataGridView控件和一个Button控件其中DataGridView控件用来显示数据库中的记录,Button控件用来将DataGridView控件中的数据以Excel格式输出。


(3)             主要程序代码。


按钮的Click事件实现代码如下:


private void button1_Click(object sender, EventArgs e)


   {


         ExportDataGridview(dataGridView1, true);  


   }








自定义方法ExportDataGridView()用来实现将DataGridView控件中数据导出到Excel,该方法



主要代码如下:


public boolExportDataGridview(DataGridView dgv, bool isShowExcel)


{


          if (dgv.Rows.Count == 0)


               return false;



          //建立Excel对象


          Excel.Application excel = new Excel.Application();


          excel.Application.Workbooks.Add(true);


          excel.Visible = isShowExcel;


          //生成字段名称


          for (int i = 0; i < dgv.ColumnCount; i++)


          {


               excel.Cells[1, i + 1] =dgv.Columns[i].HeaderText;


          }


          //填充数据


          for (int i = 0; i < dgv.RowCount - 1; i++)


          {


               for (int j = 0; j <dgv.ColumnCount; j++)


               {


                  if (dgv[j, i].ValueType== typeof(string))


                   {


                       excel.Cells[i + 2, j +1] = "" + dgv[j, i].Value.ToString();


}


注意:在程序中对Excel进行操作控制时,需要引用Excel动态链接库(MicrosoftExcel 11.0 Object Library)。添加方法如下:选中当前项目,单击,选择“添加引用”选项,在弹出的“添加引用”对话框中选择“COM”选项卡,然后找到要引用的Excel动态链接库,单击“确定”按钮即可。



目录
相关文章
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
192 3
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
199 3
|
14天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
102 0
|
2月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
42 2
|
2月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
74 11
|
2月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
48 1
|
2月前
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
78 0