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 期间主要部分也是借鉴官方论坛上的 ...
随机推荐
- 【37.07%】【UESTC 360】Another LCIS
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status F ...
- Erlang游戏开发-协议
Erlang游戏开发-协议 选择什么协议? 协议包含通讯协议和数据格式. 通讯协议 通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择. HTTP HTTP比较成熟,使 ...
- PCI的imagework已由freeview软件代替
作者:朱金灿 来源:http://blog.csdn.net/clever101 在PCI 9.1中重要模块集成显示环境imagework还存在,但是到了PCI 10.0中imagework已经消失了 ...
- xaml 添加 region
原文:xaml 添加 region 本文告诉大家如何在 xaml 添加 region 在 VisualStudio 2015 和 VisualStudio 2017 微软支持在 xmal 使用 reg ...
- 我的MBTI职业性格测试
背景 最近在看<程序员的思维训练--开发人之前能的九堂课>,其中讲到了 MBTI 职业性格测试的指导意义.记起来两年多以前在面试 ASES 的时候有做过这个测试,只可惜当时的测试结果在好几 ...
- 使用CreateThread函数和_beginThreadex函数的注意事项
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用CreateThread函数创建线程时,类或结构体的变量作为CreateThread函数传递给线程函数的参数需要避 ...
- 将gdal源码转化为VS工程编译过程记录
作者:朱金灿 来源:http://blog.csdn.net/clever101 为什么要用VS工程的方式来编译gdal库?主要还是为了调试方便,虽然理论上使用命令行方式生成库也能调试,详见:GDAL ...
- JavaScript取出字符串和尾随空格
书写JavaScript性能trim()之前和之后删除空字符串格,的功能的应用String物replace()方法去除空字符串端到端格.trim()例如,对于功能键下面的代码: <script ...
- python 强制类型转换 以及 try expect
强制类型转换: 字符串 --> 整型: 字符串 第一个 是 + 或者 - ,会直接去掉 符号 ,返回 数字 如: a = '+123456' s = int(a) print(s) s ...
- Neo4j集群环境建设
简介: Neo4j它是目前的主流地图数据库.它本身提供了高可用性集群解决方案.本文将试图建立一个高可用性neo4j周围环境. 1. 这是一个地图数据库? 图形库(graphic database)问题 ...