datagridview打印类
根据提供的信息,我们可以总结并扩展出以下几个主要的知识点: ### 1. DataGridView 控件的打印功能 #### 1.1 打印类 GridPrinter 的设计与实现 在本项目中,作者开发了一个名为 `GridPrinter` 的类来处理 `DataGridView` 控件的打印功能。这个类的设计目的是解决原生打印功能中存在的问题,比如打印出来的行间距过窄,导致数据过于拥挤,不便于阅读。`GridPrinter` 类通过调整行距等参数来优化打印效果。 #### 1.2 打印前的数据准备 在打印之前,需要确保 DataGridView 控件中已经填充了需要打印的数据。这通常涉及到数据库查询、数据加载等步骤。例如,在代码片段中,通过以下方式填充数据: ```csharp da.Fill(dt); da.Fill(ds, "table"); ``` 这里 `da` 是一个 `OleDbDataAdapter` 对象,它用于从数据库中检索数据,并填充到 `DataTable` 或 `DataSet` 中。 ### 2. 数据库连接与数据查询 #### 2.1 连接字符串的配置 为了方便管理和使用数据库连接信息,可以将连接字符串配置在应用程序的配置文件(如 `app.config` 或 `web.config`)中。本例中通过以下方式获取连接字符串: ```csharp string connection = ConfigurationManager.AppSettings["sqlconn"]; ``` 这种方式有助于提高代码的可维护性和安全性。 #### 2.2 使用 OleDb 进行数据操作 在本项目中,使用了 `OleDb` 类库来访问数据库。`OleDb` 是 .NET Framework 提供的一种用于访问 OLE DB 数据源的技术。常见的 OLE DB 数据源包括 Access 数据库、Excel 文件等。 #### 2.3 SQL 查询语句的编写 SQL 查询语句用于从数据库中检索数据。本例中的 SQL 查询语句如下所示: ```sql SELECT [b.id], [a.accname], [b.begindate], [b.enddate], [b.je], [b.rate], [b.Interest], [b.skrname], [b.jxbz], [b.remark], [b.afterjxje] FROM account a INNER JOIN jkmxb ON (a.AccID = b.jkrid) ``` 此查询通过 `INNER JOIN` 将 `account` 表和 `jkmxb` 表联接起来,并选择多个列作为结果集。 ### 3. DataGridView 控件样式设置 #### 3.1 设置 DataGridView 的样式属性 为了使 DataGridView 显示得更加美观,可以通过设置其各种样式属性来达到目的。例如: - 设置列标题的字体和背景颜色: ```csharp dataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold, GraphicsUnit.Point); dataGridView.ColumnHeadersDefaultCellStyle.BackColor = SystemColors.ControlDark; ``` - 设置单元格边框样式: ```csharp dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Single; ``` #### 3.2 动态设置列宽 在代码片段的最后部分,有一段用于遍历 DataGridView 的所有列并设置其宽度的代码,但由于代码不完整,这里提供一个示例代码: ```csharp foreach (DataGridViewColumn col in dataGridView.Columns) { // 动态计算列宽 int columnWidth = CalculateColumnWidth(col); col.Width = columnWidth; } private int CalculateColumnWidth(DataGridViewColumn column) { // 计算逻辑... return 100; // 示例返回值 } ``` 通过以上分析可以看出,`datagridview打印类` 的实现不仅仅是关于打印功能本身,还涉及到数据加载、数据库访问、界面展示等多个方面。这些知识点对于理解和开发类似的应用程序都非常关键。
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Drawing.Printing;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Globalization;
namespace WindowsFormsApplication2
{
public partial class Statistics : Form
{
GridPrinter gridPrinter;
private DataSet ds = new DataSet();
private OleDbConnection conn = null;
private OleDbDataAdapter da = null;
private string DRIVER = ConfigurationManager.AppSettings["sqlconn"];//获取配置文件里自己设置的连接字符串;
private DataTable dt = new DataTable();
private string sql_select = "SELECT [b.id],[a.accname],[b.begindate],[b.enddate],[b.je],[b.rate],[b.Interest],[b.skrname],[b.jxbz],[b.remark],[b.afterjxje] FROM account a INNER JOIN jkmx b ON (a.AccID = b.jkrid)";//自已的SELECT语句
public Statistics()
{
InitializeComponent();
private void Statistics_Load(object sender, EventArgs e)
{
string connection = ConfigurationManager.AppSettings["sqlconn"];//获取配置文件里自己设置的连接字符串
conn = new OleDbConnection(DRIVER);
conn.Open();
da = new OleDbDataAdapter(sql_select, conn);
cmdbuilder = new OleDbCommandBuilder(da);
da.Fill(dt);
da.Fill(ds, "table");
rowssum();
try
{
da.Fill(ds, "dt");
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
dataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold, GraphicsUnit.Point);
dataGridView.ColumnHeadersDefaultCellStyle.BackColor = SystemColors.ControlDark;
dataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
剩余34页未读,继续阅读
- qdksjtlk2011-10-21行内数据量大时候显示不出来。只是提供个一个简单的打印类。测试环境要自己配。
- 关山明月2011-11-16只是一个TXT文档,晕死!
- 粉丝: 5
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助