网上查了一些关于合计的代码 ,但发现大都都不尽人意,就自己再根据资料改了一下。

#region 合计
//调用方法示例
//HeJi heji = null;
//heji = new HeJi(label1,dataGridView1);
//heji.AddHeji("FTransportOperator_ID",4);
//heji.AddHeji("FLoadingTeam_ID",6);
//heji.sumdata(); public class HeJi
{ //两个控件 文本,表格
private Label Lab1;
private DataGridView Grid;
//定义类的私有变量,两个是滚动条
HScrollBar hs;
VScrollBar vs; //合计的信息列表
List<HeJiMessage> li = new List<HeJiMessage>(); //初始化
public HeJi() { }
public HeJi(Label lab, DataGridView grid)
{
Lab1 = lab;
Grid = grid; hs = ((HScrollBar)this.Grid.Controls[]);
vs = ((VScrollBar)this.Grid.Controls[]);
hs.ValueChanged += new EventHandler(hs_ValueChanged);
vs.ValueChanged += new EventHandler(vs_ValueChanged);
Lab1.Paint += new PaintEventHandler(Lab_Paint);
Grid.CellValueChanged += new DataGridViewCellEventHandler(CellValueChanged);
}
//滚动条委托事件
public void hs_ValueChanged(object sender, EventArgs e)
{
this.Lab1.Invalidate();
}
public void vs_ValueChanged(object sender, EventArgs e)
{
this.Lab1.Invalidate();
} /// <summary>
/// 表格数值改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
sumdata();
} /// <summary>
/// //添加需要合计的列
/// </summary>
/// <param name="name">字段名</param>
/// <param name="number">列索引</param>
public void AddHeji(string name, int number)
{
Rectangle rec = this.Grid.GetCellDisplayRectangle(number, , false);
li.Add(new HeJiMessage(name, number,rec));
} /// <summary>
/// paint委托事件,重画
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Lab_Paint(object sender, PaintEventArgs e)
{
DataGridViewColumnCollection Columns = this.Grid.Columns;
int count = Grid.Columns.Count;
Graphics grf = e.Graphics;
StringFormat strfmt = new StringFormat();
strfmt.Alignment = StringAlignment.Center;
//判断有显示的行,利用行获取Rectangle位置信息
foreach (HeJiMessage heji in li)
{
Rectangle rec = this.Grid.GetCellDisplayRectangle(heji.CellNumber, , false);
for (int i = ; i < Grid.Rows.Count; i++)
{
if (Grid.Rows[i].Displayed)
{
rec = this.Grid.GetCellDisplayRectangle(heji.CellNumber, i, false);
heji.Rec = rec;
Console.WriteLine("显示行为:" + i.ToString());
break;
}
}
grf.DrawString(string.Format("{0:F2}",heji.hejiSum ), this.Lab1.Font, Brushes.Black, this.Grid.Left + heji.Rec.X, , strfmt);
}
} //计算总和
public void sumdata()
{ DataGridViewRowCollection rows = this.Grid.Rows;
foreach (HeJiMessage heji in li)
{
heji.hejiSum = ;
foreach (DataGridViewRow row in rows)
{
heji.hejiSum += Convert.ToDecimal(row.Cells[heji.hejiName].Value);
}
} //重画
this.Lab1.Invalidate();
}
} //合计需要的信息,列名,列索引,总和,位置信息
public class HeJiMessage
{
public string hejiName = null;
public int CellNumber = ;
public decimal hejiSum = ;
public Rectangle Rec;
public HeJiMessage() { }
/// <summary>
/// 初始化
/// </summary>
/// <param name="name">列名</param>
/// <param name="number">列索引</param>
/// <param name="rec">位置信息</param>
public HeJiMessage(string name, int number,Rectangle rec)
{
hejiName = name;
CellNumber = number;
Rec = rec;
}
} #endregion

C#DataGridView合计处理的更多相关文章

  1. C# DataGridView合计行

    在网上搜了很多关于DataGridView合计行的设计及源码,都不是很合我心意.于是自己写了一个关于合计行的DLL.以后每次要用到合计行的时候只要引用这个DLL就可以了. 效果图如下: 引用Dll: ...

  2. 分享一个带有合计行功能的DataGridView扩展

    因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...

  3. winform DataGridView添加合计行

    使用方法 /* DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable(); DataGridViewAddSumRow sumRow = new Da ...

  4. C# WinForm开发系列 - DataGridView

    1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...

  5. DataGridView

    一.实现CheckBox列. 1.1 增加CheckBox列: 在DataGridView中增加CheckBox列: 注意:设置ColumnType类型和设置FalseValue为0,TrueValu ...

  6. GJM:C# WinForm开发系列 - DataGridView 使用方法集锦 [转载]

    1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...

  7. (转)DataGridView多维表头及其扩展功能

    dataGridView1.RowHeadersVisible = false;把整行选中那一列去掉.如果需要整行选中,新增一按钮列模拟实现.上源码:多维DataGridView 有个简易的方法: 1 ...

  8. C# 自定义重绘DataGridView

    using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using Syste ...

  9. DataGridView控件-学习笔记总结

    1.GridColor属性用来获取或设置网格线的颜色 dataGridView1.GridColor=Color.Blue; 2.设置宽度 .高度 dataGridView1.Columns[].Wi ...

随机推荐

  1. 应用HTK搭建语音拨号系统2:创建单音素HMM模型

    选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  2. SQL关于分页的sql查询语句 limit 和row_number() OVER函数

    在做项目的时候需要些分页,用的数据库是mysql,之前看到的参考例子是用MS SQL做的,在MS SQL.ORACLE里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...

  3. redis pub/sub 实战: 微信语音识别

    2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...

  4. jquery 常用的备忘

    1.table 取  tr 的 id值 <table class="table table-striped table-hover table-bordered" id=&q ...

  5. vc++创建文件目录

    #include "stdafx.h" #include <iostream> #include <fstream> #include <string ...

  6. 24. javacript高级程序设计-最佳实践

    1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...

  7. java入门 第一季4

    1.数组 1).声明数组 数据类型[]数组名; 数据类型 数组名[]; 2).分配空间 数组名=new 数据类型[数组长度]: 3).赋值 score[0]=98: 直接创建一个长度为4的数组 int ...

  8. EMIS系统运行时提示【无法验证发行者,您确实要运行此软件吗? 】

    无法验证发行者,您确实要运行此软件吗? 遇到这个提示你怎么办? 运行 gpedit.msc 进入组策略用户配置 ==>管理模板==> winows组件 ==> 附件管理器在 &quo ...

  9. Divide and conquer:K Best(POJ 3111)

     挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa #inclu ...

  10. C#集合及特殊字符

    集合里面 打印  出来时 要把 集合内的格式转化为其他格式! 壹. 集合 在.add之前 为空   数组  同样  添加元素之前 为  空(下一章超市购物例题具体体现) 1.System Collec ...