c#实现打印datagridview

实现DataGridView的打印 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Drawing.Printing;using System 阅读详情
c#实现打印datagridview
2009年05月21日 星期四 18:24

在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打

印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。

打印操作通常包括以下四个功能

1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等

2 页面设置 设置页面大小纸张类型等

3 打印预览 类似于word中的打印预览

4 打印

下面我把我编写的记事本(全部源代码可以在http://www.cndot.net中下载)中用到的打印功能的代码进行解释希望能给大家一些帮助

实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所

有的与打印有关的事件和方法

这个类包括以下几个属性 事件 和方法

1、PrinterSettings 属性

   存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的

2、PrintCountroller 属性

   控制打印过程

3、DefaultPageSettings 属性

   存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的

4、DocumentName 属性

   指定文档名称,出现在打印机状态窗口中

1。 BeginPrint事件

   在打印之前发出

2. PrintPage事件

   每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息

   PrintPageEventArgs参数有很多重要的属性

   1 Cancel 取消打印

   2 Graphics 页面的绘图对象

   3 HasMorePages 是否还有要打印的页面

Print 方法 该方法没有参数 调用它将按照当前设置开始打印

若实现打印功能首先构造PrintDocument对象添加打印事件

PrintDocument printDocument;

private void InitializeComponent()

{

...

printDocument=new PrintDocument();

printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);

...

}

实现打印事件功能

打印和绘图类似都是调用Graphics 类的方法进行画图 不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算

如换行 分页等。

private void printDocument_PrintPage(object sender,PrintPageEventArgs e)

{

StringReader lineReader = new StringReader(textBox.Text);

Graphics g = e.Graphics; //获得绘图对象

float linesPerPage = 0; //页面的行号

float yPosition = 0;    //绘制字符串的纵向位置

int count = 0; //行计数器

float leftMargin = e.MarginBounds.Left; //左边距

float topMargin = e.MarginBounds.Top; //上边距

string line = null; 行字符串

Font printFont = this.textBox.Font; //当前的打印字体

SolidBrush myBrush = new SolidBrush(Color.Black);//刷子

linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每页可打印的行数

//逐行的循环打印一页

     while(count < linesPerPage && ((line=lineReader.ReadLine()) != null))

     {

        yPosition = topMargin + (count * printFont.GetHeight(g));

        g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());

        count++;

     }

如果本页打印完成而line不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中lineReader会

自动读取上次没有打印完的内容因为lineReader是这个打印方法外的类的成员它可以记录当前读取的位置

     if(line != null)

         e.HasMorePages = true;

     else

         e.HasMorePages = false;

}

打印设置,构造打印对话框 将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument

的PrinterSettings属性中

protected   void FileMenuItem_PrintSet_Click(object sender,EventArgs e)

{

PrintDialog printDialog = new PrintDialog();

printDialog.Document = printDocument;

printDialog.ShowDialog();

}

页面设置和打印预览与打印设置原理相同都是构造对话框将用户在对话框中的设置保存到相应的类的属性中

protected   void FileMenuItem_PageSet_Click(object sender,EventArgs e)

{

   PageSetupDialog pageSetupDialog = new PageSetupDialog();

   pageSetupDialog.Document = printDocument;

   pageSetupDialog.ShowDialog();

}

打印预览

protected void FileMenuItem_PrintView_Click(object sender,EventArgs e)

{

    PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();

    printPreviewDialog.Document = printDocument;

       try

       {

     printPreviewDialog.ShowDialog();

       }

     catch(Exception excep)

     {

     MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);

     }

}

打印就可以直接调用printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以

在这里再次显示打印设置对话框

   protected void FileMenuItem_Print_Click(object sender,EventArgs e)

   {

    PrintDialog printDialog = new PrintDialog();

    printDialog.Document = printDocument;

    lineReader = new StringReader(textBox.Text);

    if (printDialog.ShowDialog() == DialogResult.OK)

    {

     try

        {

        printDocument.Print();

        }

        catch(Exception excep)

             {

               MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);

               printDocument.PrintController.OnEndPrint(printDocument,new PrintEventArgs());

             }

        }

   }

总结打印的过程是

1 在应用程序窗体初始化时构造PrintDocument对象   添加 printDocument 的 PrintPage 方法

2 实现PrintPage方法   4 在用户的单击事件中调用 printDocument 的 Print方法实现打印功能

在这中间可能要用到   PrintDialog PrintPreviewDialog PageSetupDialog 设置和查看打印效

posted on 2007-04-24 17:09 天缘静浩 阅读(2389) 评论(4) 编辑 收藏 引用 c实现打印datagridview - Sam - YanCheng

# seek

感谢LZ分享使用经验

纠正个小错误。

总结打印的过程是

-------------

1 在应用程序窗体初始化时构造PrintDocument对象 添加 printDocument 的 PrintPage 方法

------------

应该是添加 printDocument 的 PrintPage 的事件:)

  回复   更多评论   # seek

发现一个BUG,当所在行的文本长度过长时候 打印预览显示不完整,估计打印也不完整  回复   更多评论   # onlyup

楼上说的 bug 其实 不完全是bug

参见 msdn 里面有一句

http://msdn.microsoft.com/zh-cn/library/system.drawing.printing.printdocument (VS.80).aspx

注意

此示例要求每一行都适合于页宽。

如过需要自动适应长度 则没有在此代码讨论范围内

C#使用Windows打印组件PrintDocument等打印DataGridView中的数据   在打印按钮的点击事件中调用下面的方法: //printPreviewDialog1打印,可预览打印内容         private void Print1()         {             if (System.Windows.Forms.MessageBox.Show("是否要预览打印文档", "打印预览",System.Windows.Forms.MessageBox... 阅读详情

相关推荐

C# dataGridView打印与Excel导出功能实现

NET框架是微软开发的一个多语言编程环境,它支持C#、VB.NET等多种语言。它允许开发者快速构建、部署和运行各种应用程序,包括Windows、Web、移动以及游戏开发。EPPlus 支持 .xlsx 格式的 Excel 文件,并且由于它使用 Open Packaging Conventions 和 Zip 压缩,无需 COM 自动化就可以生成较小的文件。EPPlus 也能够工作在没有安装 Office 的环境中,这使得它非常适合在服务器端运行。

weixin_29025501的博客 1347

如何在C#中实现DATAGRIDVIEW 数据打印

如何在C#中实现DATAGRIDVIEW 数据打印 本文由 秦 涛 发表在《[技术分享]C#/.NET》 有2条评论了 (已有1,783人读过本文) 分享下关于 C#中 实现打印功能的代码   希望对初学者有所帮助关于打印格式感觉很痛苦 我一般选择两种方式 一种是通过 DRAWING 格式,另外一种通过HTML代码来控制,都特别麻烦,不知道各位

HelloLWei的专栏 4140

C#万能打印--winform中打印dataGridView表格

1.vs2008,在解决方案中添加现有项目DLLFullPrint,然后在主工程中添加引用,引用这个项目。 2.在界面设计中,添加按钮PrintButton,双击它进入代码界面; 在代码文件中,首先使用using DLLFullPrint; 然后按钮点击事件中写入以下代码: private void printButton_Click(object sender, EventArgs e) { System.Data.DataTable dt = new System.Data.DataTable(); DataRow dr; //设置列表头 foreach (DataGridViewColumn headerCell in dataGridView1.Columns) { dt.Columns.Add(headerCell.HeaderText); } foreach (DataGridViewRow item in dataGridView1.Rows) { dr = dt.NewRow(); for (int i = 0; i < dt.Columns.Count; i++) { dr[i] = item.Cells[i].Value.ToString(); } dt.Rows.Add(dr); } DataSet dy= new DataSet(); dy.Tables.Add(dt); MyDLL.TakeOver(dy); } 3.运行程序,点击打印按钮,弹出打印界面,调节界面,打印预览,需安装打印机。

c#打印datagridview,很好

国外的代码,很不错,运行通过。能实现简单的设置进行打印。 原作者:http://blog.youkuaiyun.com/yjlwl1213/article/details/4376073原原作者:(http://www.codeproject.com/KB/grid/PrintDataGrid_CS.aspx) 打印设置打印预览 解决方案构成这个打印解决方案由一个打印设置的窗体,及一个打印类组成。可用于以下场...

普羅●米修斯 ——— HelloWorld 2392

c# 实现datagridview完美打印功能

c# 实现datagridview完美打印功能 可选择字段、设置标题、打印选择行

c# 打印类 实现datagrideview的打印

c# print 实现DataGridView的打印 /// /// 打印DataGridView控件 /// /// DataGridView控件 /// 是否包括列标题 /// 为 System.Drawing.Printing.PrintDocument.PrintPage 事件提供数据。 /// 起始X坐标 /// 起始Y坐标

c#窗体应用 dataGridView1 实现打印功能

1、先创建一个类文件PrintDataGridView 把代码复制进去: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Data; using System.Data.SqlClient; using System.Drawing.Printin

陈的博客 3397

c#打印datagridview数据

这个打印解决方案由一个打印设置的窗体,及一个打印类组成。 可用于以下场景: 1、显示的数据量较大,但又没有必要打印全部数据的时候 2、希望打印出的列宽能自动适应页面宽度

c#打印方框_C#_实现Winform控件dataGridView的打印与分页

本文档是参考网上的资料,稍加修改,经过实际编译,可实现Winform上dataGridView控件的打印,并实现分页,下面为程序代码,仅供参考。本程序不需要在界面上添加任何打印相关控件。publicpartialclassExample:Form{//打印文檔PrintDocumentpdDocument=newPrintDocument();//打印格式設置頁面PageSetupDialogd...

weixin_28949049的博客 464

C#打印预览和打印datagridview

C#打印预览和打印datagridview

C#datagridview打印技术

打印datagridview的内容,默认边距为1毫米,内有说明,可自行更改

C#利用PrintDocument实现分页打印DataGridView数据的基本思路

C#利用PrintDocument实现分页打印DataGridView的基本思路如下: 主要是利用PrintPageEventArgs e 的HasMorePages属性,e.HasMorePages为真,系统会自动调用printDocument1_PrintPage方法。例如, private void printDocument1_PrintPage(object sender, Prin...

绝圣弃智-零的博客 4508

深入解析SAP F4帮助函数F4IF_INT_TABLE_VALUE_REQUEST的回调机制

本文深入解析了SAP ABAP开发中F4IF_INT_TABLE_VALUE_REQUEST函数的回调机制。通过剖析其工作原理与核心参数,详细阐述了如何利用回调函数实现F4帮助的多值返回、动态数据过滤及选择后校验等高级定制功能,并提供了实用的代码示例与调试技巧,帮助开发者高效应对复杂的屏幕交互需求。

weixin_29213827的博客 198

winform中实现DataGridView的打印,用c#实现

    在项目的时候,需要实现datagridview的打印功能。在网上找到了Salan Al-Ani写的打印类。根据项目的需求,在Salan Al-Ani程序的基础上实现了横向打印和纵向打印;页码与子页码的实现;并且将Salan Al-Ani的一个错误修正了:在打印预览的对话框中点击打印按钮,页码重复计算的问题。 Salan Al-Ani的源代码下载地址:http://www.codeproje

青青木屋 8071

PID详解

1、什么是PID及其作用 设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID 根据此误差调整输入值,直至输出达到设定值. 为什么需要PID呢,比如控制温度,我们需要设置一个要达到的目标温度值,当将温度稳定在目标温度值 例如,我们希望水的目标温度值为70°,其希望无非就是可以快速而且无抖动的达到70°,并稳定在70° 如果我们使用普通的方式加热,当温度到达70°后就以及停止加热,岂不是简单快速,当然用在要求不高的场合也可以,但是如果要求更高的场合呢,会出现温度到达70°后......

weixin_48435215的博客 5万+

【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER

在Apollo星火计划学习笔记——Apollo路径规划算法原理与实践与【Apollo学习笔记】——Planning模块讲到……Stage::Process的函数会依次调用task_list中的TASK,本文将会继续以LaneFollow为例依次介绍其中的TASK部分究竟做了哪些工作。由于个人能力所限,文章可能有纰漏的地方,还请批评斧正。在配置文件中,我们可以看到LaneFollow所需要执行的所有task。本文将继续介绍LaneFollow的第10个TASK——动态规划规划目标加速度尽可能小。

sinat_52032317的博客 3425

c#打印方框_C# 实现Winform控件dataGridView的打印与分页

本文档是参考网上的资料,稍加修改,经过实际编译,可实现Winform上dataGridView控件的打印,并实现分页,下面为程序代码,仅供参考。本程序不需要在界面上添加任何打印相关控件。publicpartialclassExample:Form{//打印文檔PrintDocumentpdDocument=newPrintDocument();//打印格式設置頁面PageSetupDialogd...

weixin_39849548的博客 413

快速玩转 Llama2!机器学习 PAI 最佳实践(一)—低代码 Lora 微调及部署

本实践将采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。

阿里云云栖号 1765

C#编码中,打印预览DataGridView的一段代码,稍作了修改,可以实现。

///     /// 打印预览DataGridView公共类     /// Coin     /// 传递参数DataGridView的实体对象     ///     public static class PrintDGV     {         #region 相关私有变量         private static StringFormat StrFormat

Gain something here. 1159

SCG到ECG信号转换:Wave U-Net模型实现移动端心脏监测

心脏监测技术中,心电图(ECG)和心脏振动信号(SCG)是两种重要的生物信号。ECG记录心脏电活动,而SCG捕捉机械振动,两者通过电-机械耦合机制关联。Wave U-Net模型通过编码器-解码器结构和扩张卷积,实现了SCG到ECG的高精度转换,参数量减少90%以上。这一技术在移动设备上达到临床可用精度,未来可通过手机实现专业级心电图监测。应用场景包括睡眠呼吸暂停监测、心脏再同步化治疗评估等,为移动医疗带来革新。

weixin_35649491的博客 301

散户渡劫指南:从炼气期到化神期的量化之路

经常有人问我普通人怎么学习量化交易,我就在想怎么学了量化就不是普通人了吗,可能他的意思是类比修仙,量化素人如何修炼进阶,今天就将量化学习每个阶段均对标修仙境界的核心能力与心法要诀一一介绍,助你从“交易凡人”蜕变为“量化金仙”。

木头大左的博客 1338

C#打印dataGridView中的数据

这几天,我研究了以下C#如何打印dataGridView中的数据,在网上、图书馆搜索和查阅了一些内容,现总结一下://执行打印窗体中的数据操作private void toolStripButton2_Click(object sender, EventArgs e)        {            printDialog1.ShowDialog();  //设置打印文档 

锋行天下的专栏 1290

AMS TMF8820/21/28 SPAD 掩码和模式选择

为了实现最快的测距周期,将报告周期设置在测距周期以下的毫秒,以确保不会有等待时间。除了8X8固定了pixel的位置意外,其他模式客户可以设计自己的spad掩码,并将spad单独分配给通道。对于这些spad掩码,有一些约束。左下角提示红色代表光学中心,绿色方框表示单个spad,每个MP里可能有2X3个spad,也有2X5个spad,也有3X6+3个spad,这部分适配光学,最大的程度的利用spad区域。以下是几种预定义的spad掩码,非常灵活的配置,来适配各种3X3,4X4,8X8的模式选择。

dream it possible 700
上一篇: 转 C# DataGridView很全面的基本功能介绍
下一篇: http://www.oschina.net/
first_fish
博客等级 码龄21年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值