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 ...
随机推荐
- 应用HTK搭建语音拨号系统2:创建单音素HMM模型
选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...
- SQL关于分页的sql查询语句 limit 和row_number() OVER函数
在做项目的时候需要些分页,用的数据库是mysql,之前看到的参考例子是用MS SQL做的,在MS SQL.ORACLE里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...
- redis pub/sub 实战: 微信语音识别
2015年5月22日 20:20:20 星期五 效果: 这边对微信说话, 浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...
- jquery 常用的备忘
1.table 取 tr 的 id值 <table class="table table-striped table-hover table-bordered" id=&q ...
- vc++创建文件目录
#include "stdafx.h" #include <iostream> #include <fstream> #include <string ...
- 24. javacript高级程序设计-最佳实践
1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...
- java入门 第一季4
1.数组 1).声明数组 数据类型[]数组名; 数据类型 数组名[]; 2).分配空间 数组名=new 数据类型[数组长度]: 3).赋值 score[0]=98: 直接创建一个长度为4的数组 int ...
- EMIS系统运行时提示【无法验证发行者,您确实要运行此软件吗? 】
无法验证发行者,您确实要运行此软件吗? 遇到这个提示你怎么办? 运行 gpedit.msc 进入组策略用户配置 ==>管理模板==> winows组件 ==> 附件管理器在 &quo ...
- Divide and conquer:K Best(POJ 3111)
挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa #inclu ...
- C#集合及特殊字符
集合里面 打印 出来时 要把 集合内的格式转化为其他格式! 壹. 集合 在.add之前 为空 数组 同样 添加元素之前 为 空(下一章超市购物例题具体体现) 1.System Collec ...