using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Printing;
using System.Drawing;
using System.Windows.Forms;
using System.Windows;
using System.Data;
using Microsoft.Office;
namespace KingBoy
{
    class MyDataGrid:DataGridView
    {
        #region var
        //用户可自定义 
        private Font tableFont=new Font("宋体", 9);  // '当前要打印文本的字体及字号 
        private Font headFont=new Font("黑体", 12, FontStyle.Regular);//表头字体 
        private Font subHeadFont=new Font("楷体_GB2312", 10, FontStyle.Regular); //副表头字体 
        private String headText="" ; //表头文字 
        private String subHeadLeftText="";  //副表头左文字
        private String subHeadRightText="";  //副表头右文字 
        private int headHeight=40;  //表头高度 
        private int subHeadHeight=30;  //副表头高度 
        private Font footFont=new Font("黑体", 12, FontStyle.Underline); //表脚字体
        private Font subFootFont=new Font("楷体_GB2312", 10, FontStyle.Regular);//副表脚字体 
        private String footText=""; ////表脚文字 
        private String subFootLeftText="" ;  //副表脚左文字 
        private String subFootRightText="" ;  //副表脚右文字
        private int footHeight=40; //表脚高度
        private int subFootHeight=30;  //副表脚高度 
        private String worker="";  //'制表人
        private double sum=0; //汇总数据
        private int x_unit=0; //表的基本单位
        private int y_unit= 24;

//以下为模块内部使用      
        private PrintDocument printDocument1;     
        private DataRow dataGridRow;
        private DataTable dataTable1;
        private int Cols; //                          '当前要打印的列                          
        private int ColsCount; //                    '当前DATAGRID共有多少列       
        private int pageRecordNumber; //                 '当前要所要打印的记录行数,由计算得到. 
        private int printingPageNumber=0;//           '正要打印的页号 
        private int pageNumber;//                       '共需要打印的页数
        private int printRecordLeave;//                 '当前还有多少页没有打印 
        private int printRecordComplete=0;  //        '已经打印完的记录数 
        private int pLeft,pTop,pRight,pBottom,pWidth,pHeight;
        private SolidBrush drawBrush = new SolidBrush(System.Drawing.Color.Black);//   '当前画笔颜色 
        private int pRecordNumber=0  ;//'每页打印的记录条数 
        private int totalPage;  //总共应该打印的页数        
        #endregion
        #region property
         
        /// <summary>
        ///用户自定义字体及字号
        /// </summary>
        public Font setTableFont
        {
         set{tableFont=value;}
        }
        /// <summary>
        /// 设置表头字体
        /// </summary>
       public Font setHeadFont
       {
        set{headFont =value;}
       }
        public Font setFootFont
        {
         set{footFont=value;}
        }
       public Font setSubFootFont
       {
        set{subFootFont =value;}
       }
      public string setHeadText
      {
       set{headText =value;}
      }
      public string setSubHeadLeftText
      {
        set{subHeadLeftText =value;}
      }
        public string setSubHeadRightText
        {
         set{subHeadRightText =value;}
        }
       public string setFootText
       {
         set{footText =value;}
       }

public string setSubFootLeftText
       {
         set{subFootLeftText =value;}
       }
       public string setSubFootRightText
       {
         set{subFootRightText =value;}
       }
       public int setHeadHeight
       {
        set{headHeight =value;}
       }
public int setSubHeadHeight
{
 set{
   subHeadHeight =value;
 }
}
        public int setFootHeight
        {
         set{footHeight =value;}
        }
       public int setSubFootHeight
       {
         set{subFootHeight =value;}
       }
        public int setCellHeight
        {
          set{y_unit =value;}
        }
        /// <summary>
        /// 汇总数据
        /// </summary>
        public double setSum
        {
         set{sum=value;}
        }
        /// <summary>
        /// 设置制表人
        /// </summary>
      public string setWorker
      {
       set{worker =value;}
      }
       
        #endregion
        #region method
        /// <summary>
        /// 根据列明统计该列值总和
        /// </summary>
        /// <param name="colomnName">列明</param>
        /// <returns>如果该列明是数值型,则返回统计结果,否则返回0</returns>
        public double addColumnDGV(string colomnName)
        {
          try
          {
              int i=0; //循环下标
              double sum=0;//用来保存统计临时结果
              for(i=0;i<this.Rows.Count ;i++)
                  try
                  { sum=sum+Convert.ToDouble(this.Rows[i].Cells[colomnName].Value); }//获取i行colomnName列值
                  catch (Exception)
                  { }                  
              return sum;
          }
            catch(Exception )
          {
            return 0;
            }
        }
        public double addColumnDGV(string colomnName,char ch)
        {
            try
            {
                int i = 0; //循环下标
                double sum = 0;//用来保存统计临时结果
                for (i = 0; i < this.Rows.Count; i++)
                    try
                    { sum = sum + Convert.ToDouble(this.Rows[i].Cells[colomnName].Value.ToString().Substring(1, this.Rows[i].Cells[colomnName].Value.ToString().Length-1)); }//获取i行colomnName列值
                    catch (Exception)
                    { }
                return sum;
            }
            catch (Exception)
            {
                return 0;
            }
        }
        /// <summary>
        /// 统计某行从intStartCol列到intEndCol和
        /// </summary>
        /// <param name="row">行值</param>
        /// <param name="intStartCol">起始列索引值</param>
        /// <param name="intEndCol">终止列索引值</param>
        /// <returns>合法统计结果,非法返回0</returns>
        public double addRowDGV(int row,int intStartCol,int intEndCol)
        {
          try
          {
              //判断列的起始和终止索引是否有效,行值在有效的范围内
            if (this.Columns.Count >0 && intStartCol >=0 && intEndCol <this.Columns.Count && row<this.Rows.Count ) 
            {
              int i;
                double tmpDec=0;
                //循环统计该行起始列到终止列累加和,从intStartCol到intEndCol列都是数值型数据
                for (i=intStartCol;i<intEndCol;i++)
                    try
                    {tmpDec=tmpDec +(double)(this.Rows[row].Cells[i].Value); }
                    catch (Exception)
                    { }
                    
                return tmpDec;
            }
            else
                return 0;
          }
            catch(Exception)
          {
            return 0;
            }
        }    
        /// <summary>
        /// 导出数据到Excel
        /// <param name="startComlumn">起始列,0表示第一列,依次类推</param>
        /// <param name="endColumn" >终止列,1表示第一列,依次类推</param>
        /// </summary>
        public void loadDataToExcel(int startComlumn,int endColumn)
        {
          if (this.Rows.Count <=0)
          { MessageBox.Show("没有数据,无法导出!");
            return ;
          }
          if (startComlumn > endColumn)
          {
              MessageBox.Show("起始列不能大于终止列!");
              return;
          }
          if (startComlumn>=this.Columns.Count || endColumn>=this.Columns.Count)
          {
              MessageBox.Show("起始列和终止列都不能大于总列数!");
              return;
          }
          //创建Excel中的新表         
          Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
          oExcel.Application.Workbooks.Add(true);   
          
          int n=0;
          int i=0;         
          //填充表头
          for (i = startComlumn; i < endColumn; i++)
          { 
          oExcel.Cells[1, i+1] = this.Columns[i].HeaderText;
          }
          for(n=0;n<this.Rows.Count;n++)
              for (i = startComlumn; i <endColumn; i++)
              { 
               oExcel.Cells[n+2, i+1] = this.Rows[n].Cells[i].Value.ToString();
             
              }
          oExcel.Visible = true;        
          oExcel.Quit();
          oExcel = null;
            GC.Collect();
              
        }

含有打印、统计DataGridView(1)的更多相关文章

  1. 含有打印、统计DataGridView(2)

    /// <summary>        /// 导出数据到Excel                /// </summary>        public void loa ...

  2. C语言字母频率统计

    在进行密码破解时有时候需要得到字母出现的频率信息,下面我将简单的使用C语言来读取一个文件,然后统计该文件内的字母出现的频率. 1.在D盘下新建一个文本文件(文件名为"A.txt") ...

  3. Linux - wc统计文件行数、单词数或字节数

    一 wc简单介绍 wc命令用来打印文件的文本行数.单词数.字节数等(print the number of newlines, words, and bytes in files).在Windows的 ...

  4. shell的wc命令统计 head tail命令详解

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  5. C# 使用PrintDocument 绘制表格 完成 打印预览

    C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable   经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代 ...

  6. C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable

    经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代码及来源见最后(其中一份是VB语言的) 其中遇到的一些问题也已经得到了解决(分页,打印预 ...

  7. C# WinForm开发系列 - DataGrid/DataGridView

    在WinForm开发中,DataGrid/DataGridView被广泛使用于绑定数据库中数据进行呈现.整理一些关于DataGrid/DataGridView使用的文章,涉及DataGrid/Data ...

  8. Linux命令-统计文件中的字节数、字数、行数:wc

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  9. C# PrintDocument 打印表格

    1.封装好的辅助类: using System; using System.Data; using System.Drawing; using System.Drawing.Printing; usi ...

随机推荐

  1. P3908 异或之和

    题目描述 求1 \bigoplus 2 \bigoplus\cdots\bigoplus N1⨁2⨁⋯⨁N 的值. A \bigoplus BA⨁B 即AA , BB 按位异或. 输入输出格式 输入格 ...

  2. vue中剖析中的一些方法

    1 判断属性 71 -81 var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check whether the object h ...

  3. docker升级&加速器配置

    默认使用yum或者apt安装的docker版本较老,可以通过以下方式进行升级: 1.卸载旧版本 [root@CentOS702 ~]# centos 7.3卸载docker[root@CentOS70 ...

  4. <QT之Bug制造机>QT中串口类“QSerialPort”的学习笔记

    QT5中已经增加了串口类QSrialPort,可以直接调用API函数进行快速开发. 1. 获取串口信息 Dialog::Dialog(QWidget *parent) : QDialog(parent ...

  5. <QT障碍之路>qt中使用串口类接收数据不完整

    问题:当用QT中的serial->readAll()的时候,不会把全部的数据一次性都读取出来,而是阶段性的.原因是因为当串口有信号时候,readyRead()信号就会被抛出,那么一帧完整的数据帧 ...

  6. 洛谷 P1913 L国的战斗之伞兵

    P1913 L国的战斗之伞兵 题目背景 L国即将与I国发动战争!! 题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区… ...

  7. 获取个人借阅信息---图书馆client

    在上一篇利用jsoup解析个人信息----图书馆client,获得个人基本信息后.便有了进一步的需求:获取当前借阅的具体信息 获取的方法还是一样的.利用jsoup解析借阅信息页面,获得所需数据,封装成 ...

  8. JAVA多态学习2

    好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasti ...

  9. FileStream vs/differences StreamWriter?

    https://stackoverflow.com/questions/4963667/filestream-vs-differences-streamwriter What is different ...

  10. js中的this详解

    在web前端开发中,javascript中的this和其他的JAVA,C#等大型语言一样,是一个重要概念.但是要注意的是,在javascript中,由于 javascript的动态性,this的指向在 ...