zoukankan      html  css  js  c++  java
  • 含有打印、统计DataGridView(1)

    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();
                  
            }

  • 相关阅读:
    函数语法:Js之on和addEventListener的使用与不同
    练习:javascript弹出框及地址选择功能,可拖拽
    jQuery.extend 函数使用
    计算输入时间如“ 2018-12-12” 的 00:00:00距离现在的时间间隔
    JS获取当前时间戳的方法
    常规正则表达式练习
    登录表单验证简单实现
    简单计算器
    MySQL 单表查询
    C++读写文件
  • 原文地址:https://www.cnblogs.com/ysz12300/p/5507625.html
Copyright © 2011-2022 走看看