保存、加载和打印
C1FlexGrid控件具有让你保存、加载并打印表格的方法。
如果您是第一次阅读本系列文章,建议您阅读:
- ComponentOne FlexGrid for WinForms 中文版快速入门(1)--开始使用 FlexGrid
- ComponentOne FlexGrid for WinForms 中文版快速入门(2)--设计时支持
- ComponentOne FlexGrid for WinForms 中文版快速入门(3)--单元格、行列交互
- ComponentOne FlexGrid for WinForms 中文版快速入门(4)--设置单元格格式
- ComponentOne FlexGrid for WinForms 中文版快速入门(5)--设置单元格类型(上)
- ComponentOne FlexGrid for WinForms 中文版快速入门(5)--设置单元格类型(下)
- ComponentOne FlexGrid for WinForms 中文版快速入门(6)—合并单元格
- ComponentOne FlexGrid for WinForms 中文版快速入门(7)—概述和汇总数据(上)
- ComponentOne FlexGrid for WinForms 中文版快速入门(7)—概述和汇总数据(下)
1.1.1 保存和载入表格到文本文件
“保存表格”方法可以将表格内容保存到一个文本文件。该方法具有可以控制使用的分隔符类型的参数(例如,逗号、制表符、自定义分隔符),可以确定是否要保存固定的单元格还是只保存滚动的单元格,和要使用的编码类型(例如,ASCII或Unicode)。生成的文本文件随后可以被装入控件,或装入到其他支持逗号或制表符分隔的文件的应用程序(例如,Microsoft Excel)。
“加载表格”方法可以从文本文件中加载数据。你可以加载用“保存表格”方法或与其他应用程序创建的文本文件。文本文件的格式是相当简单的。单元格的内容可以保存为格式化字符串(完全是因为他们在屏幕上显示)。如果单元格的文本包含引号字符或单元格分隔符,那么单元格会被引号引起来。
单元格的文本中包含的任何引用字符都增加了一倍。这也是在Microsoft Excel文本文件中所使用的惯例。
文本文件不包含图片或格式信息。
“保存表格”方法有一个标志参数,它可以使你指定是否要保存整个表格或只保存其中的某些部分(滚动的、可见的、或选中的)。
1.1.2 保存和加载Microsoft Excel文件
从版本2.5开始,你可以使用“保存表格”和“加载表格”方法来保存和加载Microsoft Excel文件(.XLS)以及文本文件。这可以使你除了保存数据之外,还可以保存格式信息。要使用“保存表格”和“加载表格”方法来保存和加载Excel文件,只需简单地设置格式参数到FileFormatEnum.Excel,并且像往常一样调用方法。你不需要在你的计算机上安装Microsoft Excel。
Excel文件中包含由“工作表”组成的“工作簿”。“保存表格”和“加载表格”方法总是用一个单一的工作表来保存工作簿,并从现有工作簿来载入第一页工作表。如果你想额外的控制工作来加载或保存,请使用SaveExcel,LoadExcel,LoadExcelSheetNames方法来代替。Excel文件保存和加载的过程将转换大多数的数据类型和格式信息,包括行和列的尺寸、字体、颜色、格式、单元格对齐方式。然而,并不是所有的格式元素可以转换。例如,表格将加载Excel单元格的值,但它不会加载其隐含的公式。其他特征,如固定和合并单元格,图片,数据映射,单元格边框等,也没有被翻译。
1.1.3 从数据库中载入表格
你也可以从数据库中加载表格数据。这不同于数据绑定,它可以保持一个或多个控件和基础数据源之间的实时连接。为了从数据库加载数据,你可以使用DataReader对象,如下所示:
· Visual Basic
Private Sub _btnData_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnData.Click '准备好DataReader。 Dim strConn As String = "data source=MYMACHINE;initial catalog=Northwind;" Dim myConn As New SqlClient.SqlConnection(strConn) Dim myCMD As New SqlClient.SqlCommand("SELECT * FROM Employees", myConn) myConn.Open() Dim myReader As SqlClient.SqlDataReader = myCMD.ExecuteReader() '从DB模式来建立表格结构。 Dim dt As DataTable = myReader.GetSchemaTable() _flex.Cols.Count = 1 Dim dr As DataRow For Each dr In dt.Rows Dim c As C1.Win.C1FlexGrid.Column = _flex.Cols.Add() c.Caption =(c.Name <= CStr(dr("ColumnName"))) c.DataType = CType(dr("DataType"), Type) Next dr '填充表格。 _flex.Rows.Count = 1 Dim row As Integer = 1 Dim cols As Integer = dt.Columns.Count Dim v As Object() = CType(Array.CreateInstance(GetType(Object), cols), Object()) While myReader.Read() myReader.GetValues(v) _flex.AddItem(v, row + 1, 1) End While '清理。 _flex.AutoSizeCols() myReader.Close() myConn.Close() |
· C#
private void _btnData_Click(object sender, System.EventArgs e) { //准备好DataReader。 string strConn = "data source=MYMACHINE;initial catalog=Northwind;"; System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection(strConn); System.Data.SqlClient.SqlCommand myCMD = new System.Data.SqlClient.SqlCommand("SELECT * FROM Employees", myConn); myConn.Open(); System.Data.SqlClient.SqlDataReader myReader = myCMD.ExecuteReader(); //从DB模式来建立表格结构。 DataTable dt = myReader.GetSchemaTable(); _flex.Cols.Count = 1; foreach (DataRow dr in dt.Rows) { Column c = _flex.Cols.Add(); c.Caption = c.Name = (string)dr["ColumnName"]; c.DataType = (Type)dr["DataType"]; //填充表格。 _flex.Rows.Count = 1; int row = 1; int cols = dt.Columns.Count; object[] v = (object[])Array.CreateInstance(typeof(object), cols); while (myReader.Read()) { myReader.GetValues(v); _flex.AddItem(v, row++, 1); } //清理。 _flex.AutoSizeCols(); myReader.Close(); myConn.Close(); } |
1.1.4 打印表格
使用“打印表格”方法来打印表格的内容。该方法具有可以让你选择缩放模式,是否显示打印/预览对话框,设置页眉和页脚,等等的参数。
“打印参数”属性可以公开额外的打印性能,如字体,使用页眉和页脚,而一个.NET Framework “打印文档”对象可以用来选择打印机,纸张大小和方向,页边距等。
下面的代码使用了“打印参数”属性来设置页面方向、页边距、页眉和页脚的字体。然后它调用“打印表格”方法来显示打印预览对话框窗口:
· Visual Basic
'获取表格的“打印文档”对象。 Dim pd As Printing.PrintDocument pd = _flex.PrintParameters.PrintDocument() ' 设置页面(横向打印,左边页边距1.5")。 With pd.DefaultPageSettings .Landscape = True .Margins.Left = 150 End With '设置页眉和页脚的字体。 _flex.PrintParameters.HeaderFont = New Font("Arial Black", 14, FontStyle.Bold) _flex.PrintParameters.FooterFont = New Font("Arial Narrow", 8, FontStyle.Italic) '预览表格。 _flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.FitToPageWidth + C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog, "C1FlexGrid" + Chr(9) + |
· C#
//获取表格的“打印文档”对象。 System.Drawing.Printing.PrintDocument pd = _flex.PrintParameters.PrintDocument; //设置页面(横向打印,左边页边距1.5")。 pd.DefaultPageSettings.Landscape = true; pd.DefaultPageSettings.Margins.Left = 150; //设置页眉和页脚的字体。 _flex.PrintParameters.HeaderFont = new Font("Arial Black", 14, FontStyle.Bold); _flex.PrintParameters.FooterFont = new Font("Arial Narrow", 8, FontStyle.Italic); //预览表格。 _flex.PrintGrid("C1FlexGrid", PrintGridFlags.FitToPageWidth | PrintGridFlags.ShowPreviewDialog, "C1FlexGrid\t\t" + Microsoft.VisualBasic.Strings.Format(DateTime.Now, "d"), "\t\tPage {0} of {1}"); |