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

引用Dll:

附上例子源码:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} TSumRow.TSumCols tsc = new TSumRow.TSumCols();
List<Jyinfo> ListJy = new List<Jyinfo>(); private void Form1_Load(object sender, EventArgs e)
{
DGV.AutoGenerateColumns = false; //禁止自动创建列
DGV.AllowUserToResizeColumns = false; //禁止自动调整列宽
} private void button1_Click(object sender, EventArgs e)
{
GetData();
} /// <summary>
/// 获取数据
/// </summary>
private void GetData()
{
Jyinfo j = null;
List<Jyinfo> listjy = new List<Jyinfo>();
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=123456"))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT [Id],[Name],[Age],[Sl],[Zl],[Dj],[Je] FROM [dbo].[JyInfo]";
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
j = new Jyinfo(); j.Id = Convert.ToInt32(reader["Id"]);
j.Name = reader["Name"].ToString();
j.Age = Convert.ToInt32(reader["Age"]);
j.Sl = Convert.ToInt32(reader["Sl"]);
j.Zl = Convert.ToInt32(reader["Zl"]);
j.Dj = Convert.ToInt32(reader["Dj"]);
j.Je = Convert.ToInt32(reader["Je"]); listjy.Add(j);
}
reader.Close();
}
ListJy = listjy;
DGV.DataSource = ListJy; #region 汇总行 《以下就是显示DataGridView合计行的代码》
List<TSumRow.TColumns> listTc = new List<TSumRow.TColumns>();
TSumRow.TColumns Tc = new TSumRow.TColumns();
Tc.Col_Name = "Col_Id"; //DataGridView列的序号列列名
Tc.Col_Value = "合计:"; //要显示在合计行的值
listTc.Add(Tc); Tc = new TSumRow.TColumns();
Tc.Col_Name = "Col_Name"; //DataGridView列的姓名列列名
var q = from b in ListJy
group b by b.Name;
Tc.Col_Value = q.Count().ToString();//汇总多少个客户
listTc.Add(Tc); Tc = new TSumRow.TColumns();
Tc.Col_Name = "Col_dj"; //DataGridView列的单价列列名
Tc.Col_Value = string.Format("{0:F2}", ListJy.Average(a => a.Dj));//平均单价
listTc.Add(Tc); Tc = new TSumRow.TColumns();
Tc.Col_Name = "Col_je"; //DataGridView列的金额列列名
Tc.Col_Value = string.Format("{0:F2}", ListJy.Sum(a => a.Je)); ;//总的销售额
listTc.Add(Tc); tsc.AddHz(listTc, DGV, pan);
#endregion
}
} /// <summary>
/// 交易信息实体类
/// </summary>
[Serializable]
public class Jyinfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int Sl { get; set; }
public int Zl { get; set; }
public int Dj { get; set; }
public int Je { get; set; }
}
}
合计我使用的是Panel对象。
定义对象:Panel对象名为pan,DataGridView对象名为DGV
合计行DLL下载链接(永久有效):http://pan.baidu.com/s/1c2mtZ1I
转载请说明出处:http://www.cnblogs.com/haibing0107/p/6823516.html 作者:涂山吕吕
C# DataGridView合计行的更多相关文章
- 分享一个带有合计行功能的DataGridView扩展
因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...
- winform DataGridView添加合计行
使用方法 /* DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable(); DataGridViewAddSumRow sumRow = new Da ...
- C# DataGridView显示行号的三种方法
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...
- NC nc5.x报表设置合计行是否显示
首先要先继承UI类 /** * 设置合计行是否显示 */ public TotalsReportUI() { super(); getReportBase().getBodyPanel().setTo ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...
- 【转】DataGridView显示行号
ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...
- 对FineU框架Grid多表头合计行导出Excel的回顾
年前用FineUI开发遇到了这样一个问题,Grid多表头合计行不能导出,后面到官方示例找了一下,庆幸的是找到了多表头的导出示例.然后当时为了省事,直接就复制粘贴完事,也没有仔细的研究代码.后来运行一看 ...
- 给Extjs的GridPanel增加“合计”行(转)
再Google,找到一个看似写的比较好的 http://www.cnblogs.com/over140/archive/2009/05/06/1449892.html 期间主要部分也是借鉴官方论坛上的 ...
随机推荐
- JS类型转换规则详解
JS类型转换规则详解 一.总结 一句话总结:JS强制类型转换中的类型名强制类型转换和其它语言不同,是类型类的构造方法,Number(mix) 一句话总结(JS类型本质):因为js是弱类型语言,所以它相 ...
- 机器学习:Softmax Classifier (两个隐含层)
程序实现 softmax classifier, 含有两个隐含层的情况.activation function 是 ReLU : f(x)=max(0,x) f1=w1x+b1 h1=max(0,f1 ...
- 学习JS的这些日子——十二月总结
事实上非常想早就发表这篇十二月份的总结了,可是一直拖拖拉拉没有完毕.一直在想2015年都过去了,该不该再去 写这一篇2015年最后一个月的总结.还有就是2015年的年终总结能否够取代十二月的总结,后来 ...
- Redis学习笔记4-Redis配置具体解释
在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redi ...
- NOIP模拟 Work - 二分 + 树状数组 / ???
题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...
- BZOJ 1090 - 区间dp
Magic Door 题目大意: 给一个字符串,可以将重复的串缩成x(a),表示x个a,求能缩成的最小长度. 题目分析 区间dp: dp[i][j]表示i~j处理后的最小长度, 则有 \[dp[i][ ...
- 关于ExpandableListView的一个小例子
喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...
- Cannot refer to a non-final variable inside an inner class defined in a different method
http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-clas ...
- The Python Challenge 题解
仔细阅读,图画下面的提示(网页的 title 也是重要的提示信息,至少告诉你考察的对象是什么) 1. 238 >> 2**38 274877906944L 根据提示,在 URL 地址处,0 ...
- kill the lock
$ killall -s 9 krunner_lock [ZT][From:] http://www.commandlinefu.com/commands/view/2264/unlock-your- ...