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

#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. MySQL binlog 组提交与 XA(分布式事务、两阶段提交)【转】

    概念: XA(分布式事务)规范主要定义了(全局)事务管理器(TM: Transaction Manager)和(局部)资源管理器(RM: Resource Manager)之间的接口.XA为了实现分布 ...

  2. gtk+-3.21.4 static build step in windows XP

    In recent days the weather is very hot Unable to sleep properly Under the state of daze research gtk ...

  3. ABAP ALV单个单元格状态编辑

    *&---------------------------------------------------------------------* *& Report  ZPPR0024 ...

  4. codeforces 518B. Tanya and Postcard 解题报告

    题目链接:http://codeforces.com/problemset/problem/518/B 题目意思:给出字符串 s 和 t,如果 t 中有跟 s 完全相同的字母,数量等于或者多过 s,就 ...

  5. mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]

    报错的代码 @Update("update staff_info set ApplyState = #{applyState} where Id = #{userId}") int ...

  6. 【gsl】生成随机数

    来自:http://hsxqwanting.blog.163.com/blog/static/16945437201301042830815/ 使用GSL生成随机数时的三个步骤:    (1)gsl_ ...

  7. CCF 最大的矩形

    问题描述 试题编号: 3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个 ...

  8. Keepalived虚拟ip

    linux下如何设置vip(虚拟ip) 在做HA的时候需要为服务器设计虚拟IP,也就是一个主机对应多个IP地址?刚听起来好神奇,原来这样也是可能的看了下面的这个链接 自己配了一下http://hi.b ...

  9. iOS中NSUserDefaults详解

    NSUserDefault 作为iOS中一种轻量级数据本地化方式,简单易用,经常用于存储一些应用相关属性记录,例如图书app的背景色,进度,上次阅读的书籍及相关配置信息.NSUserDefault实质 ...

  10. 让UserControl能显示焦点状态

    'set the control can display the focus status Protected Overrides Sub OnGotFocus(ByVal e As System.E ...