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 ...
随机推荐
- 一个简单的任务执行时间监视器 StopWatch
有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观, 如果想对执行的时间做进一步 ...
- Post方法调用公司发Mail的接口
调用公司发Mail的接口. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- Oracle开发之窗口函数 rows between unbounded preceding and current row
目录=========================================1.窗口函数简介2.窗口函数示例-全统计3.窗口函数进阶-滚动统计(累积/均值)4.窗口函数进阶-根据时间范围统计 ...
- oracle数据库常用plsql语句
(一)oracle中常用的数据类型 (二)PL-sql基本语法 1.创建数据库表.删除数据库表 create table table1--创建表 ( field1 number(8), field2 ...
- gitlab 无法查看提交的文件Errno::ENOMEM (Cannot allocate memory - /opt/gitlab/embedded/bin/git):
gitlab可以成功clone和push,但是提交后的文件却无法查看.从页面上看的话只显示出500错误. 查了下gitlab的日志 tail -f /var/log/gitlab/gitlab-rai ...
- Delphi中Format与FormatDateTime函数详解
copy:http://hi.baidu.com/yunfanleo/blog/item/0c51d9cdbc0531550eb34558.html Format是一个很常用,却又似乎很烦的方法,本人 ...
- ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
- ABAP 供应商、工厂对应公里数维护
*&---------------------------------------------------------------------* *& Report ZMMR011 ...
- ubunto安装pycharm
转载:http://www.cnblogs.com/zhcncn/p/4027025.html 1. 下载 http://www.jetbrains.com/pycharm/download/ 选择L ...
- openssl/asn1.h file not found的解决方法
iOS 引入支付宝 缺少 #include <openssl/asn1.h> 报错 解决方法: 在 Building Settings -> Search Paths -& ...