打印DataGridView类

合集下载

datagridview技巧

datagridview技巧

datagridview技巧DataGridView是Windows Forms中常用的控件之一,可以在应用程序中展示和编辑表格数据。

下面介绍一些DataGridView的技巧。

1. 在DataGridView中添加数据:可以通过代码动态添加数据,也可以将数据源绑定到DataGridView上。

使用DataSource属性可以绑定数据源,也可以手动遍历数据,使用Rows和Cells属性来添加数据。

2. 设置列样式:可以通过DataGridView的Column属性设置列的样式和属性,如宽度、标题文本、数据类型等。

还可以通过DefaultCellStyle属性设置列的默认单元格样式。

3. 单元格格式和数据验证:可以通过CellFormatting事件来自定义单元格的显示格式,如日期格式、货币格式等。

还可以通过CellValidating事件来验证用户输入的数据,并给出提示。

4. 排序和筛选:可以通过Sort方法对DataGridView中的数据进行排序。

还可以使用AutoFilter属性启用或禁用列标题的自动筛选功能,方便用户筛选数据。

5. 选择和编辑:可以通过SelectionMode属性设置选择模式,如单选、多选等。

还可以通过ReadOnly属性设置是否允许用户编辑单元格。

另外,还可以通过SelectedCells和SelectedRows属性获取用户选择的单元格或行。

6. 自定义单元格和行样式:可以通过CellPainting和RowPostPaint事件来自定义单元格和行的样式,如背景色、字体等。

可以根据特定的条件来改变单元格或行的样式,以提升用户体验。

7. 导出数据:可以通过DataGridView的GetClipboardContent方法将DataGridView中的数据导出为文本或HTML格式,方便数据的导出和共享。

以上是一些常用的DataGridView技巧,希望对您有帮助。

datagridview列标题

datagridview列标题

datagridview列标题摘要:1.数据网格视图(DataGridView)概述2.数据网格视图(DataGridView)的主要特点3.数据网格视图(DataGridView)的列标题设置4.实例:使用数据网格视图(DataGridView)展示数据5.总结正文:数据网格视图(DataGridView)是一种在Windows窗体应用程序中显示和编辑数据的常用控件。

它具有直观、易用的特点,可以快速展示和处理大量数据。

在本文中,我们将了解数据网格视图的主要特点、列标题设置,并通过一个实例演示如何在应用程序中使用数据网格视图展示数据。

一、数据网格视图(DataGridView)概述数据网格视图(DataGridView)是一个内置的Windows窗体控件,用于显示和编辑数据。

它可以呈现表格数据,具有行列标题、筛选、排序等功能。

数据网格视图适用于需要处理大量数据的应用程序,可以提高用户体验。

二、数据网格视图(DataGridView)的主要特点1.行列标题:数据网格视图具有行列标题,方便用户识别列内容。

2.排序和筛选:支持根据某一列进行升序或降序排序,以及根据条件筛选数据。

3.单元格样式:可以自定义单元格的样式,如字体、颜色等。

4.数据绑定:可以与数据源(如DataTable、对象等)进行绑定,自动显示数据。

5.事件处理:支持多种事件,如点击、双击等,可以进行自定义处理。

三、数据网格视图(DataGridView)的列标题设置要在数据网格视图(DataGridView)中设置列标题,可以采用以下方法:1.编程方式:在代码中为数据网格视图的列添加标题。

```csharpdataGridView.Columns["列名称"].HeaderText = "列标题内容";```2.设计器方式:在可视化设计器中,选中数据网格视图,在属性窗口中修改列标题。

四、实例:使用数据网格视图(DataGridView)展示数据以下是一个简单的实例,演示如何在一个Windows窗体应用程序中使用数据网格视图展示数据:1.创建一个新的Windows窗体应用程序项目。

C#打印预览和打印datagridview

C#打印预览和打印datagridview
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
}
private void 打印预览ToolStripMenuItem_Click(object sender, EventArgs e)
{
printPreviewDialog1.Document = this.printDocument1; //设置预览文档
pageHeight = printDocument.DefaultPageSettings.PaperSize.Height;
}
else
{
pageHeight = printDocument.DefaultPageSettings.PaperSize.Width;
// left margin
private int leftMargin;
// top margin
private int topMargin;
// right margin
private int rdView = objDataGridView;
printDocument = objPrintDocument;
centerOnPage = bCenterOnPage;
hasTitle = bHasTitle;
// title color
private Color titleColor;
// use paging?
private bool paging;
// row printing
static int currentRow;
// column stop points

DataGridView控件详细介绍

DataGridView控件详细介绍

DataGridView控件详细介绍通过DataGridView控件,可以显⽰和编辑表格式的数据,⽽这些数据可以取⾃多种不同类型的数据源。

DataGridView控件具有很⾼的的可配置性和可扩展性,提供了⼤量的属性、⽅法和事件,可以⽤来对该控件的外观和⾏为进⾏⾃定义。

当你需要在WinForm应⽤程序中显⽰表格式数据时,可以优先考虑DataGridView(相⽐于DataGrid等其它控件)。

如果你要在⼩型⽹格中显⽰只读数据,或者允许⽤户编辑数以百万计的记录,DataGridView将为你提供⼀个易于编程和良好性能的解决⽅案。

DataGridView ⽤来替换先前版本中的DataGrid,拥有较DataGrid更多的功能;但DataGrid仍然得到保留,以备向后兼容和将来使⽤。

如果你要在两者中选择,可以参考下⾯给出的DataGrid 和DataGridView之间区别的细节信息。

DataGridView提供了⼤量的DataGrid所不具备的基本功能和⾼级功能。

此外,DataGridView 的结构使得它较之DataGrid控件更容易扩展和⾃定义。

下表描述了DataGridView提供⽽DataGrid未提供的⼏个主要功能。

DataGridView功能描述多种列类型与DataGrid相⽐,DataGridView 提供了更多的内置列类型。

这些列类型能够满⾜⼤部分常见需要,⽽且⽐DataGrid 中的列类型易于扩展或替换。

多种数据显⽰⽅式DataGrid仅限于显⽰外部数据源的数据。

⽽DataGridView 则能够显⽰⾮绑定的数据,绑定的数据源,或者同时显⽰绑定和⾮绑定的数据。

你也可以在DataGridView中实现virtual mode,实现⾃定义的数据管理。

⽤于⾃定义数据显⽰的多种⽅式DataGridView提供了很多属性和事件,⽤于数据的格式化和显⽰。

⽐如,你可以根据单元格、⾏和列的内容改变其外观,或者使⽤⼀种类型的数据替代另⼀种类型的数据。

datagridview控件用法

datagridview控件用法

datagridview控件用法
1、将datagridview控件添加到From:添加DataGridView控件,双击界面上的DataGridView,根据实际情况在设计界面里调整控件大小,在属性框中设置DataGridView的数据源(DataSource)的值。

2、定义控件的列:右键DataGridView,选择“属性”,然后在弹出的对话框中,将“列集合”条目选中,点击“...”,此时可以定义你想要的列,设置列名、数据类型、宽度等信息。

3、绑定数据源:当定义好DataGridView的列后,为了显示该出来的具体的数据,可以将DataGridView与真实的数据源绑定,即可在DataGridView中显示具体数据,可以在设计时通过Visual Studio的Data Sources应用程序,或者在窗体上加载DataGridView控件时,通过代码来实现。

4、DataGridView添加行或者删除行:可以使用DataGridView的Rows属性来添加新行,或者通过使用RemoveAt(int index)方法来删除列中指定行。

5、DataGridView编辑功能及事件:默认情况下DataGridView中支持修改单元格数据,可以设置DataGridView的ReadOnly属性为false使其允许进行修改,并且DataGridView中TextBox派生的控件中的CellValidating事件、
CellValueChanged事件等都可以响应DataGridView的编辑功能,可以在这些事件中实现对数据的监测或者保存数据的操作。

datagridview 用法

datagridview 用法

datagridview 用法DataGridView是Windows Forms中的控件,是一种可以显示数据的表格控件。

常用的DataGridView属性和方法:1. 属性:DataSource:设置或获取数据源。

2. 属性:AutoGenerateColumns:设置或获取是否自动生成列。

3. 属性:RowHeadersVisible:设置或获取是否显示行标题。

4. 方法:Refresh:刷新DataGridView控件的显示。

常用的DataGridView事件:1. 事件:RowValidating:当行数据验证时发生。

2. 事件:CellClick:单击单元格时发生。

3. 事件:CellDoubleClick:双击单元格时发生。

4. 事件:SelectionChanged:当选择项发生更改时发生。

DataGridView的使用步骤:1. 创建DataGridView实例。

2. 设置DataSource属性。

3. 可选设置AutoGenerateColumns属性。

4. 可选设置RowHeadersVisible属性及其他属性。

5. 注册事件处理程序。

6. 添加DataGridView到窗体中。

下面是一个简单示例代码:C#代码:csharpdataGridView1.DataSource = dataTable; dataTable为绑定数据源dataGridView1.AutoGenerateColumns = true;dataGridView1.RowHeadersVisible = false;dataGridView1.CellClick += DataGridView_CellClick;注:DataGridView_CellClick是事件处理程序的方法名,需要自行定义。

sunnyui datagridview详细用法

sunnyui datagridview详细用法

sunnyui datagridview详细用法DataGridView是Windows Forms中的一个常用的控件,用于显示和编辑数据。

它提供了直观、易于使用的界面,用于显示和编辑表格数据。

在SunnyUI框架中,DataGridView控件提供了许多方便的功能和选项,使得数据展示更加方便。

本文将详细介绍SunnyUI框架中的DataGridView控件的用法。

一、DataGridView控件简介DataGridView控件提供了一种方便的方式来显示和编辑数据,它允许用户通过简单的鼠标操作进行选择和编辑数据。

DataGridView控件还提供了许多功能,如行高、列宽的自动调整、分页、排序、筛选等。

这些功能使得DataGridView控件在各种应用程序中都非常有用。

二、DataGridView控件属性设置在使用DataGridView控件之前,我们需要设置一些属性来控制其外观和行为。

以下是一些常用的属性及其说明:1. AutoGenerateColumns:决定是否自动生成列头和列索引。

默认为True,即自动生成列头和列索引。

2. AllowUserToAddRows:是否允许用户添加行。

默认为True。

3. AllowUserToDeleteRows:是否允许用户删除行。

默认为True。

4. RowHeights:行的高度设置。

可以通过设置此属性来改变行的高度。

5. ColumnCount和Columns:设置列的数量和名称。

可以设置多个列的名称和属性。

三、DataGridView控件数据绑定将DataGridView控件绑定到数据源是使用DataGridView控件的关键步骤之一。

可以使用以下方法将数据绑定到DataGridView控件:1. 使用DataSource属性将数据绑定到DataGridView控件。

可以将DataSet、DataTable或自定义对象集合绑定到DataGridView控件。

c#打印datagridview数据

c#打印datagridview数据
private static bool NewPage; // Indicates if a new page reached
private static int PageNo; // Number of pages to print
AvailableColumns.Clear();
foreach (DataGridViewColumn c in dgv.Columns)
{
if (!c.Visible) continue;
private static ArrayList ColumnTypes = new ArrayList(); // DataType of Columns
private static int CellHeight; // Height of DataGrid Cell
private static List<string> SelectedColumns = new List<string>(); // The Columns Selected by user to print.
private static List<string> AvailableColumns = new List<string>(); // All Columns avaiable in DataGrid
private static StringFormat StrFormatComboBox; // Holds content of a Boolean Cell to write by DrawImage
private static Button CellButton; // Holds the Contents of Button Cell

C#_实现Winform控件dataGridView的打印与分页

C#_实现Winform控件dataGridView的打印与分页

本文档是参考网上的资料,稍加修改,经过实际编译,可实现Winform上dataGridView控件的打印,并实现分页,下面为程序代码,仅供参考。

本程序不需要在界面上添加任何打印相关控件。

public partial class Example : Form{//打印文檔PrintDocument pdDocument = new PrintDocument();//打印格式設置頁面PageSetupDialog dlgPageSetup = new PageSetupDialog();//打印頁面PrintDialog dlgPrint = new PrintDialog();//實例化打印預覽PrintPreviewDialog dlgPrintPreview = new PrintPreviewDialog();public Example(){InitializeComponent();pdDocument.PrintPage += new PrintPageEventHandler(OnPrintPage);//頁面設置的打印文檔設置為需要打印的文檔dlgPageSetup.Document = pdDocument;//打印界面的打印文檔設置為被打印文檔dlgPrint.Document = pdDocument;//打印預覽的打印文檔設置為被打印文檔dlgPrintPreview.Document = pdDocument;}///<summary>/// //顯示打印預覽界面,此处需要添加一个打印预览的按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrintView_Click(object sender, EventArgs e){dlgPrintPreview.ShowDialog();}///打印设置,此处需要添加一个打印设置的按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrintSetup_Click(object sender, EventArgs e){dlgPageSetup.ShowDialog();dlgPrint.ShowDialog();}////// printDocument的PrintPage事件,实现打印功能/////////private void OnPrintPage(object sender, PrintPageEventArgs e){int iX = 60;int iY = 40;PrintDataGridView11.Print(dataGridView1, true, e, ref iX, ref iY);}///<summary>///打印,此处需添加一个打印按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrint_Click(object sender, EventArgs e){pdDocument.Print();}}///<summary>///实现DataGridView的打印类///</summary>public class PrintDataGridView11{private static List<DataGridViewCellPrint> CellPrintList = newList<DataGridViewCellPrint>();///<summary>///打印的行数private static int printRowCount = 0;///<summary>///是否要打印///</summary>private static bool IsPrint = true;///<summary>///设置的起始位置是否大于默认打印的边框///</summary>private static bool IsRole = true;///<summary>/// X坐标///</summary>private static int PoXTmp = 0;///<summary>/// Y坐标///</summary>private static int PoYTmp = 0;///<summary>///列间距///</summary>private static int WidthTmp = 0;///<summary>///行间距///</summary>private static int HeightTmp = 0;///<summary>///列数///</summary>private static int RowIndex = 0;//////打印DataGridView控件////// DataGridView控件///是否包括列标题///为System.Drawing.Printing.PrintDocument.PrintPage 事件提供数据。

C#_实现Winform控件dataGridView的打印与分页

C#_实现Winform控件dataGridView的打印与分页

本文档是参考网上的资料,稍加修改,经过实际编译,可实现Winform上dataGridView控件的打印,并实现分页,下面为程序代码,仅供参考。

本程序不需要在界面上添加任何打印相关控件。

public partial class Example : Form{//打印文檔PrintDocument pdDocument = new PrintDocument();//打印格式設置頁面PageSetupDialog dlgPageSetup = new PageSetupDialog();//打印頁面PrintDialog dlgPrint = new PrintDialog();//實例化打印預覽PrintPreviewDialog dlgPrintPreview = new PrintPreviewDialog();public Example(){InitializeComponent();pdDocument.PrintPage += new PrintPageEventHandler(OnPrintPage);//頁面設置的打印文檔設置為需要打印的文檔dlgPageSetup.Document = pdDocument;//打印界面的打印文檔設置為被打印文檔dlgPrint.Document = pdDocument;//打印預覽的打印文檔設置為被打印文檔dlgPrintPreview.Document = pdDocument;}///<summary>/// //顯示打印預覽界面,此处需要添加一个打印预览的按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrintView_Click(object sender, EventArgs e){dlgPrintPreview.ShowDialog();}///打印设置,此处需要添加一个打印设置的按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrintSetup_Click(object sender, EventArgs e){dlgPageSetup.ShowDialog();dlgPrint.ShowDialog();}////// printDocument的PrintPage事件,实现打印功能/////////private void OnPrintPage(object sender, PrintPageEventArgs e){int iX = 60;int iY = 40;PrintDataGridView11.Print(dataGridView1, true, e, ref iX, ref iY);}///<summary>///打印,此处需添加一个打印按钮///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnPrint_Click(object sender, EventArgs e){pdDocument.Print();}}///<summary>///实现DataGridView的打印类///</summary>public class PrintDataGridView11{private static List<DataGridViewCellPrint> CellPrintList = newList<DataGridViewCellPrint>();///<summary>///打印的行数private static int printRowCount = 0;///<summary>///是否要打印///</summary>private static bool IsPrint = true;///<summary>///设置的起始位置是否大于默认打印的边框///</summary>private static bool IsRole = true;///<summary>/// X坐标///</summary>private static int PoXTmp = 0;///<summary>/// Y坐标///</summary>private static int PoYTmp = 0;///<summary>///列间距///</summary>private static int WidthTmp = 0;///<summary>///行间距///</summary>private static int HeightTmp = 0;///<summary>///列数///</summary>private static int RowIndex = 0;//////打印DataGridView控件////// DataGridView控件///是否包括列标题///为System.Drawing.Printing.PrintDocument.PrintPage 事件提供数据。

C#打印DataGridView的详细代码

C#打印DataGridView的详细代码

C#打印DataGridView的详细代码[c-sharp] view plain copyprint?ing System;ing System.Collections.Generic;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Text;ing System.Windows.Forms;ing System.Drawing.Printing;ing System.IO;10.space NetCsharp12.{13.14.///15./// 实现DataGridView的打印16.///17.public class PrintDataGridView18.{19.private static List CellPrintList = new List();20.21.private static int printRowCount = 0;22.23.private static bool IsPrint = true;24.private static bool IsRole = true;25.private static int PoXTmp = 0;26.private static int PoYTmp = 0;27.private static int WidthTmp = 0;28.private static int HeightTmp = 0;29.private static int RowIndex = 0;30.31.32.///33./// 打印DataGridView控件34.///35./// DataGridView控件36./// 是否包括列标题37./// 为 System.Drawing.Printing.PrintDocument.PrintPa ge 事件提供数据。

38./// 起始X坐标39./// 起始Y坐标40.public static void Print(DataGridView dataGridView, bo ol includeColumnT ext, PrintPageEventArgs e, ref int PoX, ref int PoY)41.{42.try43.{44.if (PrintDataGridView.IsPrint)45.{46.PrintDataGridView.printRowCount = 0;47.PrintDataGridView.IsPrint = false;48.PrintDataGridView.DataGridViewCellVsList(dataGridVie w, includeColumnT ext);49.if (0 == PrintDataGridView.CellPrintList.Count)50.return;51.if (PoX > e.MarginBounds.Left)52.PrintDataGridView.IsRole = true;53.else54.PrintDataGridView.IsRole = false;55.PrintDataGridView.PoXTmp = PoX;56.PrintDataGridView.PoYTmp = PoY;57.PrintDataGridView.RowIndex = 0;58.WidthTmp = 0;59.HeightTmp = 0;60.}61.if (0 != PrintDataGridView.printRowCount)62.{63.if (IsRole)64.{65.PoX = PoXTmp = e.MarginBounds.Left;66.PoY = PoYTmp = e.MarginBounds.T op;67.}68.else69.{70.PoX = PoXTmp;71.PoY = PoYTmp;72.}73.}74.while (PrintDataGridView.printRowCount < PrintDataG ridView.CellPrintList.Count)75.{76.DataGridViewCellPrint CellPrint = CellPrintList[PrintDa taGridView.printRowCount];77.if (RowIndex == CellPrint.RowIndex)78.PoX = PoX + WidthTmp;79.else80.{81.PoX = PoXTmp;82.PoY = PoY + HeightTmp;83.if (PoY + HeightTmp > e.MarginBounds.Bottom)84.{85.HeightTmp = 0;86. e.HasMorePages = true;87.return;88.}89.}ing (SolidBrush solidBrush = new SolidBrush(CellPri nt.BackColor))91.{92.RectangleF rectF1 = new RectangleF(PoX, PoY, CellPrin t.Width, CellPrint.Height);93. e.Graphics.FillRectangle(solidBrush, rectF1);ing (Pen pen = new Pen(Color.Black, 1))95. e.Graphics.DrawRectangle(pen, Rectangle.Round(rectF 1));96.solidBrush.Color = CellPrint.ForeColor;97. e.Graphics.DrawString(CellPrint.FormattedValue, CellPr int.Font, solidBrush, new Point(PoX + 2, PoY + 3));98.}99.WidthTmp = CellPrint.Width;100.HeightTmp = CellPrint.Height;101.RowIndex = CellPrint.RowIndex;102.PrintDataGridView.printRowCount++;103.}104.PoY = PoY + HeightTmp;105. e.HasMorePages = false;106.PrintDataGridView.IsPrint = true;108.catch109.{110. e.HasMorePages = false;111.PrintDataGridView.IsPrint = true;112.throw;113.}114.115.}116.117.118.///119./// 将DataGridView控件内容转变到 CellPrintList120.///121./// DataGridView控件122./// 是否包括列标题123.private static void DataGridViewCellVsList(DataGridVie w dataGridView, bool includeColumnText)124.{125.CellPrintList.Clear();126.try127.{128.int rowsCount = dataGridView.Rows.Count;129.int colsCount = dataGridView.Columns.Count;130.131.//最后一行是供输入的行时,不用读数据。

dgvprinter参数 用法

dgvprinter参数 用法

dgvPrinter参数用法1. 概述1.1 什么是dgvPrinter:1.1.1 DataGridView的打印工具:dgvPrinter是一个用于打印DataGridView控件内容的工具,旨在提供更灵活、可定制的打印选项。

1.1.2 第三方库:通常,dgvPrinter是由第三方库提供的,为Windows Forms应用程序中使用DataGridView的开发人员提供了便捷的打印解决方案。

1.2 为什么使用dgvPrinter:1.2.1 标准打印功能的限制: .NET框架自带的DataGridView 控件提供了基本的打印功能,但在满足一些高级打印需求时可能显得不够灵活。

1.2.2 dgvPrinter的优势:dgvPrinter通过引入更多的参数和定制选项,使开发人员能够更好地控制打印输出的外观和格式。

2. dgvPrinter参数详解2.1 打印布局参数:2.1.1 纸张大小和方向:dgvPrinter允许指定打印输出的纸张大小和方向,以适应不同的打印需求。

2.1.2 边距设置:开发人员可以通过设定边距参数调整打印页面的边缘,确保打印内容的合适排列。

2.2 样式和格式参数:2.2.1 表头和列标题样式:通过dgvPrinter,可以自定义打印输出中表头和列标题的样式,包括字体、颜色等。

2.2.2 数据单元格格式:开发人员可以通过参数设置数据单元格的格式,确保打印内容的清晰可读。

2.3 分页和标题参数:2.3.1 分页设置:dgvPrinter支持自定义分页,使得打印输出在逻辑上更合理,避免跨页显示同一行数据。

2.3.2 页眉和页脚:开发人员可以利用dgvPrinter提供的参数设定页眉和页脚内容,使打印页面更具信息性。

3. 使用实例3.1 引入dgvPrinter库:3.1.1 下载和安装:开发人员需要首先从可信赖的源下载dgvPrinter库,并将其集成到项目中。

3.1.2 引用命名空间:在代码中引用dgvPrinter的命名空间,以便在项目中使用其相关类和方法。

C#多功能DataGridView打印类(WinForm)

C#多功能DataGridView打印类(WinForm)

C#多功能DataGridView打印类(WinForm)using System;using System.Collections;using ponentModel;using System.Drawing;using System.Drawing.Printing;using System.Data;using System.Windows.Forms;namespace WeightSystem{public class cutePrinter2{private DataGridView dataGridView1;private PrintDocument printDocument;private PageSetupDialog pageSetupDialog; private PrintPreviewDialog printPreviewDialog;private string title = "";int currentPageIndex = 0;int rowCount = 0;int pageCount = 0;int titleSize = 20;bool isCustomHeader = false;Brush alertBrush = new SolidBrush(Color.Red);string[] header = null; // 如果自定义就填入字符串,如果需要斜线分隔,就用\表示,例如:个数#名字其中#为splitChar string[] uplineHeader = null; // 上行文字数组int[] upLineHeaderIndex = null; // 上行的文字index,如果没有上行就设为-1;public bool isEveryPagePrintTitle = true; // 是否每一页都要打印标题。

public int headerHeight = 30; // 标题高度。

控件:DataGridView列类型

控件:DataGridView列类型

控件:DataGridView列类型 DataGridView的列的类型提供有多种,包括有:(1)DataGridViewTextBoxColumn(⽂本列,默认的情况下就是这种)(2)DataGridViewComboBoxColumn(组合框列,名字瞎起的,就是这个功能要⽤到的列)(3)DataGridViewLinkColumn(链接列)(4)DataGridViewButtonColumn(按钮列)(5)DataGridViewCheckBoxColumn(打钩列)⼀、DataGridViewComboBoxColumn 实例:DataTable dt = DBServiceHelper.businessDbHelper.Fill(UserInfo, "select a.code, from tequip_ini a where a.equip_type in (1,6) ");if (dt != null){dataGridViewTextBoxColumn3.DataPropertyName = "code";dataGridViewTextBoxColumn3.DisplayMember = "name";dataGridViewTextBoxColumn3.ValueMember = "code";dataGridViewTextBoxColumn3.DataSource = dt;} GrdReadRecord2.EditingControlShowing += newDataGridViewEditingControlShowingEventHandler(GrdReadRecord2_EditingControlShowing); 实现每⼀⾏的该单元格具有不同的ComboBox项: private void GrdReadRecord2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){try{if (GrdReadRecord2.CurrentCell.ColumnIndex == 5){ComboBox cb = e.Control as ComboBox;if (cb != null){DataTable dt = DBServiceHelper.businessDbHelper.Fill(UserInfo, " select cast(0 as varchar(200)) as code ,'' as Name UNION ALL select a.code, from tequip_ini a "+ " left join CardPosItem b on a.PosItem=b.id where a.equip_type in(1,6) and b.id= " + this.GrdReadRecord2.CurrentRow.Cells["ColPostItemID"].Value.ToString());cb.DataSource = dt;if (dt != null && dt.Rows.Count > 0)cb.SelectedIndex = 0;}}}catch (Exception ex){ListBoxAdd(lHint2, "异常:" + ex.Message.ToString());}} 值得注意的是: 每⼀⾏单元格绑定的数据必须要存在列的Item内,即是在EditingControlShowing前要先设置DataPropertyName、DisplayMember、ValueMember、DataSource,EditingControlShowing查出的数据必须是DataSource的⼦集。

winform打印和预览

winform打印和预览

winform打印和预览 在windows应⽤程序中⽂档的打印是⼀项⾮常重要的功能,在以前⼀直是⼀个⾮常复杂的⼯作,Microsoft .Net Framework的打印功能都以组件的⽅式提供,为程序员提供了很⼤的⽅便。

由于⼯作中常⽤到印功功能,个⼈写了⼀个专门打印DataGridView对象⼀个类,可以实现预览和打印功能,⽽且⾃动缩放字段、添加颜⾊;在预览时可以根据不同的⽐例查看效果,可以查看第⼏页数据和直接打印第⼏页的数据。

请看效果图。

⼆、附上调⽤代码三、提供源码:1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Drawing.Printing;6using System.Windows.Forms;7using System.Drawing;8using ponent;9namespace Bll10 {11///<summary>12///打印13///开⼼懒⼈14/// 2014-10-1015///</summary>16public class PrintDataGridView17 {1819static DataGridView dgv;20static string titleName = ""; //标题名称21static string titleName2 = ""; //第⼆标题名称22static int rowIndex = 0; //当前⾏23static int page = 1; //当前页24static int rowsPerPage = 0; //每页显⽰多少⾏25///<summary>26///打印DataGridView27///</summary>28///<param name="dataGridView">要打印的DataGridView</param>29///<param name="title">标题</param>30///<param name="title2">第⼆标题,可以为null</param>31public static void Print(DataGridView dataGridView, string title, string title2)32 {33try34 {35if (dataGridView == null) { return; }36 titleName = title;37 titleName2 = title2;38 dgv = dataGridView;39 PrintPreviewDialog ppvw = new PrintPreviewDialog();40 ppvw.PrintPreviewControl.Zoom = 1.0; //显⽰⽐例为100%41 PrintDocument printDoc = new PrintDocument();42 PrintDialog MyDlg = new PrintDialog();43 MyDlg.Document = printDoc;44 printDoc.DefaultPageSettings.PaperSize = new PaperSize("A4", 850, 1000);45 printDoc.DefaultPageSettings.Margins = new Margins(60, 60, 60, 60); //设置边距46 ppvw.Document = printDoc; //设置要打印的⽂档47 ((Form)ppvw).WindowState = FormWindowState.Maximized; //最⼤化48 rowIndex = 0; //当前⾏49 page = 1; //当前页50 printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); //打印事件51 printDoc.EndPrint += new PrintEventHandler(printDoc_EndPrint);52 ndscape = true; // 设置打印为横向53 ppvw.ShowDialog(); //打开预览5455 }56catch (Exception ex)57 {58 MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);59 }6061 }6263static void printDoc_EndPrint(object sender, PrintEventArgs e)64 {65 rowIndex = 0; //当前⾏66 page = 1; //当前页67 rowsPerPage = 0;//每页显⽰多少⾏68 }69private static void printDoc_PrintPage(object sender, PrintPageEventArgs e)70 {7172//标题字体73 Font titleFont = new Font("微软雅⿊", 16, FontStyle.Bold);74//标题尺⼨75 SizeF titleSize = e.Graphics.MeasureString(titleName, titleFont, e.MarginBounds.Width);76//x坐标77int x = e.MarginBounds.Left;78//y坐标79int y = Convert.ToInt32(e.MarginBounds.Top - titleSize.Height);80//边距以内纸张宽度81int pagerWidth = e.MarginBounds.Width;82//画标题83 e.Graphics.DrawString(titleName, titleFont, Brushes.Black, x + (pagerWidth - titleSize.Width) / 2, y);84 y += (int)titleSize.Height;85if (titleName2 != null && titleName2 != "")86 {8788//画第⼆标题89 e.Graphics.DrawString(titleName2, dgv.Font, Brushes.Black, x + (pagerWidth - titleSize.Width) / 2 + 200, y);90//第⼆标题尺⼨91 SizeF titleSize2 = e.Graphics.MeasureString(titleName2, dgv.Font, e.MarginBounds.Width);92 y += (int)titleSize2.Height;9394 }9596//表头⾼度97int headerHeight = 0;98//纵轴上内容与线的距离99int padding = 6;100//所有显⽰列的宽度101int columnsWidth = 0;102//计算所有显⽰列的宽度103foreach (DataGridViewColumn column in dgv.Columns)104 {105106//隐藏列返回107if (!column.Visible) continue;108//所有显⽰列的宽度109 columnsWidth += column.Width;110 }111112//计算表头⾼度113foreach (DataGridViewColumn column in dgv.Columns)114 {115116//列宽117int columnWidth = (int)(Math.Floor((double)column.Width / (double)columnsWidth * (double)pagerWidth));118//表头⾼度119int temp = (int)e.Graphics.MeasureString(column.HeaderText, column.InheritedStyle.Font, columnWidth).Height + 2 * padding;120if (temp > headerHeight) headerHeight = temp;121 }122123//画表头124125foreach (DataGridViewColumn column in dgv.Columns)126 {127128//隐藏列返回129if (!column.Visible) continue;130//列宽131int columnWidth = (int)(Math.Floor((double)column.Width / (double)columnsWidth * (double)pagerWidth));132//内容居中要加的宽度133float cenderWidth = (columnWidth - e.Graphics.MeasureString(column.HeaderText, column.InheritedStyle.Font, columnWidth).Width) / 2;134if (cenderWidth < 0) cenderWidth = 0;135//内容居中要加的⾼度136float cenderHeight = (headerHeight + padding - e.Graphics.MeasureString(column.HeaderText, column.InheritedStyle.Font, columnWidth).Height) / 2; 137if (cenderHeight < 0) cenderHeight = 0;138//画背景139 e.Graphics.FillRectangle(new SolidBrush(Color.LightGray), new Rectangle(x, y, columnWidth, headerHeight));140//画边框141 e.Graphics.DrawRectangle(Pens.Black, new Rectangle(x, y, columnWidth, headerHeight));142////画上边线143144//e.Graphics.DrawLine(Pens.Black, x, y, x + columnWidth, y);145146////画下边线147148//e.Graphics.DrawLine(Pens.Black, x, y + headerHeight, x + columnWidth, y + headerHeight);149150////画右边线151152//e.Graphics.DrawLine(Pens.Black, x + columnWidth, y, x + columnWidth, y + headerHeight);153154//if (x == e.MarginBounds.Left)155156//{157158////画左边线159160// e.Graphics.DrawLine(Pens.Black, x, y, x, y + headerHeight);161162//}163164//画内容165 e.Graphics.DrawString(column.HeaderText, column.InheritedStyle.Font, new SolidBrush(column.InheritedStyle.ForeColor), new RectangleF(x + cenderWidth, y + cenderHeight, columnWidth, headerHeight)); 166 x += columnWidth;167168 }169170 x = e.MarginBounds.Left;171 y += headerHeight;172while (rowIndex < dgv.Rows.Count)173 {174175 DataGridViewRow row = dgv.Rows[rowIndex];176if (row.Visible)177 {178179int rowHeight = 0;180foreach (DataGridViewCell cell in row.Cells)181 {182183 DataGridViewColumn column = dgv.Columns[cell.ColumnIndex];184if (!column.Visible || cell.Value == null) continue;185int tmpWidth = (int)(Math.Floor((double)column.Width / (double)columnsWidth * (double)pagerWidth));186int temp = (int)e.Graphics.MeasureString(cell.Value.ToString(), column.InheritedStyle.Font, tmpWidth).Height + 2 * padding;187if (temp > rowHeight) rowHeight = temp;188 }189190foreach (DataGridViewCell cell in row.Cells)191 {192193 DataGridViewColumn column = dgv.Columns[cell.ColumnIndex];194if (!column.Visible) continue;195int columnWidth = (int)(Math.Floor((double)column.Width / (double)columnsWidth * (double)pagerWidth));196 e.Graphics.DrawRectangle(Pens.Black, new Rectangle(x, y, columnWidth, rowHeight));197198if (cell.Value != null)199 {200201//内容居中要加的宽度202203float cenderWidth = (columnWidth - e.Graphics.MeasureString(cell.Value.ToString(), cell.InheritedStyle.Font, columnWidth).Width) / 2;204205if (cenderWidth < 0) cenderWidth = 0;206207//内容居中要加的⾼度208209float cenderHeight = (rowHeight + padding - e.Graphics.MeasureString(cell.Value.ToString(), cell.InheritedStyle.Font, columnWidth).Height) / 2;210211if (cenderHeight < 0) cenderHeight = 0;212213////画下边线214215//e.Graphics.DrawLine(Pens.Black, x, y + rowHeight, x + columnWidth, y + rowHeight);216217////画右边线218219//e.Graphics.DrawLine(Pens.Black, x + columnWidth, y, x + columnWidth, y + rowHeight);220221//if (x == e.MarginBounds.Left)222223//{224225////画左边线226227// e.Graphics.DrawLine(Pens.Black, x, y, x, y + rowHeight);228229//}230231//画内容232233 e.Graphics.DrawString(cell.Value.ToString(), column.InheritedStyle.Font, new SolidBrush(cell.InheritedStyle.ForeColor), new RectangleF(x + cenderWidth, y + cenderHeight, columnWidth, rowHeight)); 234235 }236237 x += columnWidth;238239 }240241 x = e.MarginBounds.Left;242243 y += rowHeight;244245if (page == 1) rowsPerPage++;246247//打印下⼀页248249if (y + rowHeight > e.MarginBounds.Bottom)250 {251252 e.HasMorePages = true;253254break;255256 }257258 }259260 rowIndex++;261262 }263264//页脚265string footer = " 第 " + page + " 页,共 " + Math.Ceiling(((double)dgv.Rows.Count / rowsPerPage)).ToString() + " 页";266//画页脚267 e.Graphics.DrawString(footer, dgv.Font, Brushes.Black, x + (pagerWidth - e.Graphics.MeasureString(footer, dgv.Font).Width) / 2, e.MarginBounds.Bottom); 268 page++;269270 }271272273 }274275 }View Code。

Gridview打印方法

Gridview打印方法

Gridview打印方法今天做一个打印功能,就是把gridview中的内容打印出来,再网上查了好多方法,最后决定把gridview包含到一个div中,然后将div的html提交到另一个页面,最终打印这个页面.打印指定内容:<html><head><script type="text/javascript" language="javascript">function printPage() {var newWin = window.open('printer','','');var titleHTML = document.getElementById("printdiv").innerHTML;newWin.document.write(titleHTML);newWin.document.location.reload();newWin.print();newWin.close();}</script></head><body><div id="printdiv"><table class="sontable" cellspacing="0" cellpadding="0" style="width: 13%"><tr><td style="width: 700px; height: 161px"><asp:GridView ID="GridData" runat="server" CellPadding="3" CellSpacing="0" BorderWidth="1px" BackColor="LightSteelBlue" BorderColor="White" BorderStyle="None" Font-Size="12px" Width="543px"Height="20px" OnRowDataBound="GridData_RowDataBound"> <RowStyle BackColor="GhostWhite" BorderColor="#006699" /><SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" Wrap="True" /><HeaderStyle Height="25px" BackColor="#006699" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" CssClass="Freezing"/></asp:GridView></td></tr></table></div><a href="javascript:;" onclick="printPage()">打印</a></body></html>代码就是这样的.第二种方法是,先将页面上的除了你要打印的标签外隐藏,接着执行打印,在打印后将页面上的标签全部显示代码如下:function printer(){beforeprint();window.focus();window.print()afterprint();}方法二页局部打印GridView 收藏----------------------------------------<script language="javascript"><!--function PrintNote(){var PrintWin=window.open('about:blank','Print');PrintWin.document.write('<object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>' + document.all("PrintContent").innerHTML);PrintWin.document.all.WebBrowser.ExecWB(7,1);PrintWin.close();}--></script>--------------------------------------------内容用<div>装起来,并把DIV设置ID<div id="PrintContent" align="center">your GridView</div>------------------------------------<input onclick="javascript:PrintNote();" type="button" value="打印" id="Button2" onserverclick="Button2_ServerClick" runat="server"/>把gridvie控件放入DIV里就可以实现打印了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Shared hi As Integer = 0
Public PrintFont As Font = New Font("Arial", 16)
Private ColumnsWidth() As Single '数组 ColumnsWidth 为计算后的列宽
Private orgColumnsWidth() As Single '数组 orgColumnsWidth 为原始的最大列宽
Private tirTextImageRelation As TextImageRelation = Windows.Forms.TextImageRelation.ImageAboveText
Private wInc As Single = 5 'wInc 为单元格宽增量
Private hInc As Single = 5 'hInc 为单元格竖增量
Dim dc As DataGridViewColumn = DGV.Columns(iC)
'计算列头文字需要的宽
Dim sizeFHeader As Drawing.SizeF
sizeFHeader = g.MeasureString(dc.HeaderText, PrintFont)
'如果列为隐藏,不打印
If DGV.Columns(i).Visible = False Then
Continue For
End If
Dim dc As DataGridViewColumn
Imports System.Drawing.Printing
Public Class PrintDataGridView
Private WithEvents PrintDocument1 As New Printing.PrintDocument
Private WithEvents PageSetupDialog1 As New System.Windows.Forms.PageSetupDialog
'如果是第一页,计算长宽
If pNo = 1 Then
GetLargestWidthOfColumn(g)
GetFitHeightOfRow(GetFitWidthOfColumn(e.MarginBounds.Width))
orgColumnsWidth(iC) = sizeFHeader.Width
End If
End If
dr.Dispose()
Next
Private WithEvents FontDialog1 As New System.Windows.Forms.FontDialog
Private WithEvents PrintPreviewDialog1 As New System.Windows.Forms.PrintPreviewDialog
ColumnsWidth(i) = DGV.Columns(i).Width
Next
Dim iC, iR As Integer
For iC = 0 To DGV.Columns.Count - 1
If DGV.Columns(iC).Visible = False Then Continue For '如果列为隐藏,不打印
orgColumnsWidth(iC) = ColumnsWidth(iC) * 3
Else
orgColumnsWidth(iC) = ColumnsWidth(iC)
End If
If sizeFHeader.Width > ColumnsWidth(iC) Then
orgColumnsWidth(iC) = sizeFHeader.Width
Else
If orgColumnsWidth(iC) > ColumnsWidth(iC) * 3 Then
'添加列头,按已经求出的最长宽度
'起始位置为纸张可打印边框的左边
StartPos = e.MarginBounds.Left
Dim i As Integer
For i = 0 To DGV.Columns.Count - 1
End If
RowHeigth = sizeFHeader.Height
dc.Dispose()
'计算值的宽
For iR = 0 To DGV.Rows.Count - 1
End Sub
'打印主体
Private Sub pd_PrintMain(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim g As Graphics = e.Graphics
dc = DGV.Columns(i)
Dim sizeFHeader As New Drawing.SizeF
sizeFHeader = e.Graphics.MeasureString(dc.HeaderText, PrintFont, ColumnsWidth(i)) '写表头
Dim l, i, k As Integer
l = orgColumnsWidth.Length
For k = 100 To 1 Step -1
Dim WidthSum As Single = 0
'按比例求宽度
Next
If Not WidthSum > pWidth Then
Exit For
End If
Next
Return (k)
End Function
Private RowHeigth As Single 'RowHeigth 为计算后的行高
Sub New()
AddHandler PrintDocument1.PrintPage, AddressOf Me.pd_PrintMain
End Sub
'按钮显示方式
'遍历整பைடு நூலகம்表格,得到每列的最大宽度
Private Sub GetLargestWidthOfColumn(ByVal g As System.Drawing.Graphics)
ReDim ColumnsWidth(DGV.Columns.Count - 1) '定义列宽数组的长度
Next
End Sub
'根据纸张宽度,计算出合适的列宽,返回缩小的比例
Private Function GetFitWidthOfColumn(ByVal pWidth As Single) As Integer
'每列按原始宽度的1%递减,直到适合纸张宽度(pWidth)
g.DrawString(dc.HeaderText, PrintFont, Drawing.Brushes.Black, New RectangleF(StartPos + wInc, StartHeigth + hInc, ColumnsWidth(i) - wInc, RowHeigth - hInc)) '添加外边框
Private DGV As DataGridView
Private strTitle As String
Private tsiDisplayStyle As ToolStripItemDisplayStyle = ToolStripItemDisplayStyle.Image
sizeFHeader = g.MeasureString(dr.Cells(iC).Value.ToString, PrintFont)
If orgColumnsWidth(iC) < sizeFHeader.Width Then
Private MainStartHeigth As Single 'MainStartHeigth 为主体表格起始的高度
Shared pNo As Integer = 1 'pNo 为页码
Private StartHeigth As Single
Private StartPos As Single
'根据合适的列宽和列宽缩小的比例,计算出合适的行高
Private Sub GetFitHeightOfRow(ByVal pScale As Integer)
RowHeigth = RowHeigth * Fix((100 / pScale) + 1) + hInc
End If
'添加DataGridView主体
'计算标题的高度,预留空间
Dim sizeFTitle As Drawing.SizeF
sizeFTitle = e.Graphics.MeasureString(Title, New Font("宋体", 30, FontStyle.Bold))
ReDim orgColumnsWidth(DGV.Columns.Count - 1)
For i As Integer = 0 To DGV.Columns.Count - 1
If DGV.Columns(i).Visible = False Then Continue For '如果列为隐藏,不打印
For i = 0 To l - 1
ColumnsWidth(i) = orgColumnsWidth(i) * k / 100
相关文档
最新文档