C#DataGridView合计处理
网上查了一些关于合计的代码 ,但发现大都都不尽人意,就自己再根据资料改了一下。
#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合计处理的更多相关文章
- C# DataGridView合计行
在网上搜了很多关于DataGridView合计行的设计及源码,都不是很合我心意.于是自己写了一个关于合计行的DLL.以后每次要用到合计行的时候只要引用这个DLL就可以了. 效果图如下: 引用Dll: ...
- 分享一个带有合计行功能的DataGridView扩展
因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...
- winform DataGridView添加合计行
使用方法 /* DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable(); DataGridViewAddSumRow sumRow = new Da ...
- C# WinForm开发系列 - DataGridView
1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...
- DataGridView
一.实现CheckBox列. 1.1 增加CheckBox列: 在DataGridView中增加CheckBox列: 注意:设置ColumnType类型和设置FalseValue为0,TrueValu ...
- GJM:C# WinForm开发系列 - DataGridView 使用方法集锦 [转载]
1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...
- (转)DataGridView多维表头及其扩展功能
dataGridView1.RowHeadersVisible = false;把整行选中那一列去掉.如果需要整行选中,新增一按钮列模拟实现.上源码:多维DataGridView 有个简易的方法: 1 ...
- C# 自定义重绘DataGridView
using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using Syste ...
- DataGridView控件-学习笔记总结
1.GridColor属性用来获取或设置网格线的颜色 dataGridView1.GridColor=Color.Blue; 2.设置宽度 .高度 dataGridView1.Columns[].Wi ...
随机推荐
- [大坑]FFT学习
[大坑]FFT学习 Macros #define fon(i,s) for(int i=0;i<s; ++i) #define fone(i,s) for(int i=0;i<=s;++i ...
- 多节点 devstack 部署
1, 网络配置 每个节点 /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.42.11 netmask ...
- 【MySQL】MySQL 如何实现 唯一随机数ID
如果不是 UUID 好像比较困难 参考资料: http://bbs.csdn.net/topics/390001507 https://www.zhihu.com/question/20151242
- Find the Duplicate Number
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...
- struts2 servlet api 访问方式
Action中访问ServletAPI. 主要就是接收表单参数及向域对象中存取值. 关于SevletAPI的方法在Action中有三种方式: 1.完全解耦合的形式: * 使用一个类:ActionCon ...
- 使用宏批量将多个csv文件转成excel文件
在一个压缩文件中有100多个csv文件,要求要将此100多个csv文件转成excel文件,名字命名不变,有三种方式: 1. 傻不拉几的复制粘贴法 2. 一个一个打开csv文件,另存为xls文件,工作量 ...
- MySQL中的增删改查
将表cm_application中的state字段类型改为字符串型 alter table cm_application modify STATE varchar(50); 将表cm_applic ...
- Linux下常用的硬件信息查看命令
1.查看CPU型号,这里为了方便查看结合管道符用grep进行了匹配,当然只需要前面的命令也可以,命令如下: cat /proc/cpuinfo | grep "model name" ...
- java web 学习 --第八天(Java三级考试)
第七天的学习内容:http://www.cnblogs.com/tobecrazy/p/3464231.html EL表达式 EL : Expression Language 使用EL表达式可以减少& ...
- effective OC2.0 52阅读笔记(五 内存管理)
第五章:内存管理 29 理解引用计数 30 以ARC简化引用计数 总结:ARC通过命名约定将内存管理规则标准化.其他编程语言很少像OC这样强调命名.ARC通过设置全局数据结构(此数据结构的具体内容因处 ...