winform DataGridView添加合计行
使用方法
/*
DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable();
DataGridViewAddSumRow sumRow = new DataGridViewAddSumRow();
sumRow.Xh_field = "xuhao";
sumRow.DgvName = this.dataGridView1;
sumRow.dataTableName = dt;
sumRow.begin();
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Drawing;
using System.ComponentModel;
namespace YL.Code
{
public class DataGridViewAddSumRow
{
private DataGridView dgv = null;
private DataTable dt = null;
private string xh_field = "";
public string Xh_field
{
get { return xh_field; }
set { xh_field = value; }
}
public DataGridViewAddSumRow()
{
}
/// <summary>
/// 设置表格的数据源
/// </summary>
public DataTable dataTableName
{
set
{
this.dt = value;
}
}
/// <summary>
///传递表格的名称
/// </summary>
public DataGridView DgvName
{
set
{
dgv = value;
}
}
/// <summary>
/// 开始添加合计行
/// </summary>
public void begin()
{
initDgv();
}
private void initDgv()
{
if (dgv != null)
{
this.dgv.DataSourceChanged += new EventHandler(dataGridView_DataSourceChanged);
this.dgv.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView_ColumnHeaderMouseClick);
this.dgv.CellValueChanged += new DataGridViewCellEventHandler(dataGridView_CellValueChanged);
this.dgv.AllowUserToAddRows = false;
dgv.DataSource = dt;
}
}
/// <summary>
/// 计算合计算
/// </summary>
/// <param name="dgv">要计算的DataGridView</param>
private void SumDataGridView(DataGridView dgv)
{
if (dgv.DataSource == null) return;
//DataTable dt = (DataTable)dgv.DataSource;
if (dt.Rows.Count < 1) return;
decimal[] tal = new decimal[dt.Columns.Count];
DataRow ndr = dt.NewRow();
string talc = "";
int number = 1;
foreach (DataRow dr in dt.Rows)
{
dr[xh_field] = number++;
int n = 0;
foreach (DataColumn dc in dt.Columns)
{
if (talc == "" && dc.DataType.Name.ToUpper().IndexOf("STRING") >= 0)
{ talc = dc.ColumnName; }
if (dc.DataType.IsValueType)
{
string hej = dr[dc.ColumnName].ToString();
try
{
if (hej != string.Empty) tal[n] += decimal.Parse(hej);
}
catch (Exception) { }
//if (hej != string.Empty) tal[n] += decimal.Parse(hej);
}
n++;
}
}
ndr.BeginEdit();
for (int i = 0; i < dt.Columns.Count; i++)
{
if (tal[i] != 0)
ndr[i] = tal[i];
}
ndr[xh_field] = ((int)(dt.Rows.Count + 1)).ToString();
if (talc != "") ndr[talc] = "合计";
ndr.EndEdit();
dt.Rows.Add(ndr);
dgv.Rows[dgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 222, 210);
dgv.Rows[dgv.Rows.Count - 1].ReadOnly = true;
if (dgv.Tag == null)
{
foreach (DataGridViewColumn dgvc in dgv.Columns)
{
dgvc.SortMode = DataGridViewColumnSortMode.Programmatic;
}
}
dgv.Tag = ndr;
}
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView sortDgv = (DataGridView)sender;
int fx = 0;
if (sortDgv.AccessibleDescription == null)
{
fx = 1;
}
else
{
fx = int.Parse(sortDgv.AccessibleDescription);
fx = (fx == 0 ? 1 : 0);
}
sortDgv.AccessibleDescription = fx.ToString();
if (sortDgv.Columns[e.ColumnIndex].Name == xh_field) return;
DataGridViewColumn nCol = sortDgv.Columns[e.ColumnIndex];
if (nCol.DataPropertyName == string.Empty) return;
if (nCol != null)
{
sortDgv.Sort(nCol, fx == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending);
}
//--
DataRow dr = (DataRow)sortDgv.Tag;
DataTable dt = (DataTable)sortDgv.DataSource;
DataRow ndr = dt.NewRow();
ndr.BeginEdit();
for (int i = 0; i < dt.Columns.Count; i++)
{
ndr[i] = dr[i];
}
dt.Rows.Remove(dr);
//if (e.ColumnIndex != 0)
{
int n = 1;
for (int i = 0; i < sortDgv.Rows.Count; i++)
{
DataGridViewRow dgRow = sortDgv.Rows[i];
DataRowView drv = (DataRowView)dgRow.DataBoundItem;
DataRow tdr = drv.Row;
tdr.BeginEdit();
tdr[xh_field] = n;
n++;
tdr.EndEdit();
}
sortDgv.Refresh();
sortDgv.RefreshEdit();
}
ndr[xh_field] = ((int)(dt.Rows.Count + 1)).ToString();
ndr.EndEdit();
dt.Rows.Add(ndr);
sortDgv.Tag = ndr;
//--
sortDgv.Sort(sortDgv.Columns[xh_field], ListSortDirection.Ascending);
sortDgv.Columns[xh_field].HeaderCell.SortGlyphDirection = SortOrder.None;
nCol.HeaderCell.SortGlyphDirection = fx == 0 ? SortOrder.Ascending : SortOrder.Descending;
sortDgv.Rows[sortDgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 210);
}
private void dataGridView_DataSourceChanged(object sender, EventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//DataTable dt = (DataTable)dgv.DataSource;
if (dt == null) return;
decimal[] tal = new decimal[dt.Columns.Count];
if (dt.Columns.IndexOf(xh_field) < 0)
{
DataColumn dc = new DataColumn(xh_field, System.Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dgv.Columns[xh_field].DisplayIndex = 0;
dgv.Columns[xh_field].HeaderText = "序号";
dgv.Columns[xh_field].SortMode = DataGridViewColumnSortMode.Programmatic;
dgv.AutoResizeColumn(dgv.Columns[xh_field].Index);
dgv.Columns[xh_field].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.Columns[xh_field].Visible = true;
}
SumDataGridView(dgv);
}
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return;
string col = dgv.Columns[e.ColumnIndex].DataPropertyName;
if (col == string.Empty) return;
if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)
{
decimal tal = 0;
foreach (DataGridViewRow dgvr in dgv.Rows)
{
if (dgvr.Index != dgv.Rows.Count - 1)
{
string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();
if (hej != string.Empty) tal += decimal.Parse(hej);
}
}
if (tal == 0)
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;
else
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;
}
}
}
}
winform DataGridView添加合计行的更多相关文章
- KDTable如何添加合计行?
/** * 功能:添加合计行 * * @param table * 指定的KDTable * @param fields * 需要合计的列 */ public static void apendFoo ...
- C# DataGridView添加新行的2个方法
可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行.假如需要动态为DataGridView控件添加新行,方法有很多种,下面简单介绍如何为DataGridView控件动态添加新行 ...
- Winform DataGridView添加列头checkbox
using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Yanwen.Logi ...
- Gridview里添加合计行
ShowFooter="true" ; ; ; protected void gvIncomeYG_RowDataBound(object sender, GridViewRowE ...
- jqGrid 添加 合计行 footDate
jQuery(table_id).jqGrid({ url : url,//组件创建完成之后请求数据的url datatype : "json",//请求数据返回的类型.可选jso ...
- 分享一个带有合计行功能的DataGridView扩展
因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...
- C#给DataTable添加序号、C#给DataTable添加合计、小计
/// <summary> /// 给DataTable添加序号 /// </summary> /// <param name= ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- Winform中的dataGridView添加自动编号
1.Winform中的dataGridView添加自动编号:http://blog.csdn.net/ohyoyo2014/article/details/38346887 2.如何为datagrid ...
随机推荐
- 如何在ABAP Netweaver和CloudFoundry里记录并查看日志
Netweaver 要记录日志需要有一个checkpoint group,可以自行创建也可以使用标准的.这里我重用标准的group:DEMO_CHECKPOINT_GROUP. tcode SAAB, ...
- Python变量状态保持四种方法
Python状态保持 全局 global def tester(start): global state state = start def nested(label): global state ...
- libav(ffmpeg)简明教程(2)
距离上一次教程又过去了将近一个多月,相信大家已经都将我上节课所说的东西所完全消化掉了. 这节课就来点轻松的,说说libav的命令使用吧. 注:遇到不懂的或者本文没有提到的可以用例如命令后加 --hel ...
- python request下载文件时,显示进度以及网速
import requests import time def downloadFile(name, url): headers = {'Proxy-Connection':'keep-alive'} ...
- solr数据分片相关
solr操作url 使用正常的core,使用命令生成coillection solr create_collection -c students2 -d ../server/solr/my/conf ...
- python之enumerate
http://eagletff.blog.163.com/blog/static/116350928201266111125832/一般情况下,如果要对一个列表或者数组既要遍历索引又要遍历元素时,可以 ...
- C# WinForm 绘制圆角窗体
public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; FormPath = new Syste ...
- 通过Jquery获取RadioButtonList选中值
推荐 使用第二种,第一种有时候不起作用 第一种:通过find方法 获取RadioButtonList所选中的值 <script type="text/javascript"& ...
- Centos7之WEB服务器
1.安装httpd服务 输入命令:yum -y install httpd [root@N37012 ~]# yum -y install httpc Loaded plugins: fastestm ...
- Mbps、Kbps、bps、kb、mb区别和换算
Mbps 即 Milionbit pro second(百万位每秒) Kbps 即 Kilobit pro second(千位每秒) bps 即 bit pro second(位每秒) 速度单位,bi ...