在网上搜了很多关于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合计行的更多相关文章

  1. 分享一个带有合计行功能的DataGridView扩展

    因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...

  2. winform DataGridView添加合计行

    使用方法 /* DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable(); DataGridViewAddSumRow sumRow = new Da ...

  3. C# DataGridView显示行号的三种方法

    方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...

  4. NC nc5.x报表设置合计行是否显示

    首先要先继承UI类 /** * 设置合计行是否显示 */ public TotalsReportUI() { super(); getReportBase().getBodyPanel().setTo ...

  5. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架

    这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...

  6. DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html

    方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...

  7. 【转】DataGridView显示行号

    ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...

  8. 对FineU框架Grid多表头合计行导出Excel的回顾

    年前用FineUI开发遇到了这样一个问题,Grid多表头合计行不能导出,后面到官方示例找了一下,庆幸的是找到了多表头的导出示例.然后当时为了省事,直接就复制粘贴完事,也没有仔细的研究代码.后来运行一看 ...

  9. 给Extjs的GridPanel增加“合计”行(转)

    再Google,找到一个看似写的比较好的 http://www.cnblogs.com/over140/archive/2009/05/06/1449892.html 期间主要部分也是借鉴官方论坛上的 ...

随机推荐

  1. 【37.07%】【UESTC 360】Another LCIS

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status F ...

  2. Erlang游戏开发-协议

    Erlang游戏开发-协议 选择什么协议? 协议包含通讯协议和数据格式. 通讯协议 通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择. HTTP HTTP比较成熟,使 ...

  3. PCI的imagework已由freeview软件代替

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在PCI 9.1中重要模块集成显示环境imagework还存在,但是到了PCI 10.0中imagework已经消失了 ...

  4. xaml 添加 region

    原文:xaml 添加 region 本文告诉大家如何在 xaml 添加 region 在 VisualStudio 2015 和 VisualStudio 2017 微软支持在 xmal 使用 reg ...

  5. 我的MBTI职业性格测试

    背景 最近在看<程序员的思维训练--开发人之前能的九堂课>,其中讲到了 MBTI 职业性格测试的指导意义.记起来两年多以前在面试 ASES 的时候有做过这个测试,只可惜当时的测试结果在好几 ...

  6. 使用CreateThread函数和_beginThreadex函数的注意事项

    作者:朱金灿 来源:http://blog.csdn.net/clever101 使用CreateThread函数创建线程时,类或结构体的变量作为CreateThread函数传递给线程函数的参数需要避 ...

  7. 将gdal源码转化为VS工程编译过程记录

    作者:朱金灿 来源:http://blog.csdn.net/clever101 为什么要用VS工程的方式来编译gdal库?主要还是为了调试方便,虽然理论上使用命令行方式生成库也能调试,详见:GDAL ...

  8. JavaScript取出字符串和尾随空格

    书写JavaScript性能trim()之前和之后删除空字符串格,的功能的应用String物replace()方法去除空字符串端到端格.trim()例如,对于功能键下面的代码: <script ...

  9. python 强制类型转换 以及 try expect

    强制类型转换: 字符串 -->  整型: 字符串 第一个  是 +  或者 -  ,会直接去掉 符号 ,返回 数字 如: a = '+123456' s = int(a) print(s) s ...

  10. Neo4j集群环境建设

    简介: Neo4j它是目前的主流地图数据库.它本身提供了高可用性集群解决方案.本文将试图建立一个高可用性neo4j周围环境. 1. 这是一个地图数据库? 图形库(graphic database)问题 ...