Winform怎样添加统计行并合并单元格

yth126 2011-01-11 02:55:42
如下图:

我要的是Winform的,不是Web版
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2011-01-11
  • 打赏
  • 举报
回复
合并
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)

if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
using
(
Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
backColorBrush = new SolidBrush(e.CellStyle.BackColor)
)
{
using (Pen gridLinePen = new Pen(gridBrush))
{
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
if (e.RowIndex < dataGridView1.Rows.Count - 1 &&
dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() !=
e.Value.ToString())
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
e.CellBounds.Bottom - 1);
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
e.CellBounds.Top, e.CellBounds.Right - 1,
e.CellBounds.Bottom);
if (e.Value != null)
{
if (e.RowIndex > 0 &&
dataGridView1.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() ==
e.Value.ToString())
{ }
else
{
e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
Brushes.Black, e.CellBounds.X + 2,
e.CellBounds.Y + 5, StringFormat.GenericDefault);
}
}
e.Handled = true;
}
}
}
http://topic.csdn.net/u/20100609/13/4d9006e4-529e-4b30-91ae-9908f5806c58.html
纯唇Yu弄 2011-01-11
  • 打赏
  • 举报
回复

//把下面
//#region 添加DataGridView底行合计数 的四个方法 和 #endregion 添加DataGridView底行合计数 的四//个方法之间的 代码拷贝到你的程序中

//然后再 给要计算合计的 DataGridView 对象(此处假定为dataGridView1) 绑定 下面的方法及 数据表 则可:

//这里假设通过点击 按钮 之后 绑定

private void button1_Click(object sender, EventArgs e)
{

dataGridView1.DataSourceChanged += new EventHandler(dataGridView_DataSourceChanged);
dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView_ColumnHeaderMouseClick);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView_CellValueChanged);
dataGridView1.AllowUserToAddRows = false;
dataGridView1.DataSource = 这里是要绑定的数据表;

}



#region 添加DataGridView底行合计数 的四个方法
/// <summary>
/// 计算合计算
/// </summary>
/// <param >要计算的DataGridView</param>
private void SumDataGridView(DataGridView dgv)
{

#region 计算合计数
//DataGridView dgv = (DataGridView)sender;
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["@xu.Hao"] = 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["@xu.Hao"] = ((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, 255, 210);


if (dgv.Tag == null)
{
foreach (DataGridViewColumn dgvc in dgv.Columns)
{
dgvc.SortMode = DataGridViewColumnSortMode.Programmatic;
}
}


dgv.Tag = ndr;

#endregion


}
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 == "@xu.Hao") 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["@xu.Hao"] = n;
n++;
tdr.EndEdit();

}
sortDgv.Refresh();
sortDgv.RefreshEdit();

}
ndr["@xu.Hao"] = ((int)(dt.Rows.Count + 1)).ToString();
ndr.EndEdit();
dt.Rows.Add(ndr);
sortDgv.Tag = ndr;

//--
sortDgv.Sort(sortDgv.Columns["@xu.Hao"], ListSortDirection.Ascending);
sortDgv.Columns["@xu.Hao"].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("@xu.Hao") < 0)
{
DataColumn dc = new DataColumn("@xu.Hao", System.Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dgv.Columns["@xu.Hao"].DisplayIndex = 0;
dgv.Columns["@xu.Hao"].HeaderText = "#";

dgv.Columns["@xu.Hao"].SortMode = DataGridViewColumnSortMode.Programmatic;
dgv.AutoResizeColumn(dgv.Columns["@xu.Hao"].Index); 

dgv.Columns["@xu.Hao"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
}
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;
}
}
#endregion 添加DataGridView底行合计数 的四个方法
yth126 2011-01-11
  • 打赏
  • 举报
回复
为什么不能显示图片?
yth126 2011-01-11
  • 打赏
  • 举报
回复
[code=HTML]
code]
Flex:Web报表引擎——MyReport 2.3.6.0 + 免Flex开发集成版 release 2.3.6.0 --新增功能:报表编辑器支持打开/报表本地文件功能 --新增功能:单元格垂直合并 --新增功能:报表编辑器,标题支持单个和多个单元格添加 --修改功能:修改报表编辑器,添加列,删除列功能 --修改功能:修改报表编辑器编辑效果 --优化样式文件数据量 release 2.3.5.1 --修正Bug:单元格合并时,合并列宽计算错误 release 2.3.5.0 --新增功能:增加报表高度自动递增设置 --新增功能:新增一维码EAN13,EAN8函数:ToEAN13,ToEAN8 --新增功能:新增LenInt函数 --新增功能:表达式引擎支持一元运算符+,-, ! --新增功能:表达式引擎支持字符串定义"",'' --新增功能:打印预览数据筛选 --修改功能:修改统计函数类 --修改功能:修改Fixed,Ceil,Floor,Round函数 --修改功能:修改表达式编辑器函数列表 --修正Bug:报表编辑器删除设计项界面刷新问题 --修正Bug:修改报表右边距界面刷新问题 详情参考:http://blog.csdn.net/hunkcai/archive/2011/04/09/6312603.aspx Web报表引擎: Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写,一维码显示,图片显示 ,条件样式等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上良好的报表设计用户体现,可视化编辑,支持设计/预览视图撤换。 * 通过下拉框选择,快速设置报表数据的绑定。 * 支持单元格内容格式化(数字,金额,日期等)输出。 * 通过表达式编辑,轻松设计页小计或页统计。 * 支持标题高度,高,列宽拖动编辑,拖放调整顺序等良好操作。 内含: * MyReport报表引擎库文件MyReport.swc。 * MyReport免Flex开发集成版,适用于以传统html构建的系统,希望集成MyReport报表引擎的报表预览、打印和报表设计功能,并且不需要进 Flex相关的二次开发的用户。 * Flex示例工程和.Net示例工程。 * 相关说明文档和示例数据。 注: * Flex示例工程,用Adobe Flash Builder 4开发环境打开,用Flex SDK 4.1进编译。 * .Net示例工程,用Visual Studio 2010开发环境打开。 * 只需少量工作就能把MyReport整合,获得良好的打印体现和报表设计体现。 * 报表引擎效果图参考:http://blog.csdn.net/hunkcai/archive/2010/01/14/5190898.aspx * 报表编辑器效果图参考:http://blog.csdn.net/hunkcai/archive/2010/04/21/5512031.aspx
Grid++Report 报表组件适用于VB.NET、C#、VB、VC、Delphi、C++Builder、Foxpro(VFP)、易语言等一切支持 COM 的开发工具。除了提供报表的统计分析、打印、打印预览、数据导出等功能,还提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现通用报表、表格报表、动态报表、多层表头、票据与发票套打、交叉表、表中表及各种特殊报表等。提供详尽帮助文档与各种编程平台下的丰富例子,安装中包括可直接运例子程序,安装后即刻体验此报表工具。包括简体中文版、繁体中文版与英文版。经过数年的发展,已经被国内多家有影响力的通用软件厂商采用,其用户遍布各各业,已经成为用户受众面最广的国产报表开发工具。

Grid++Report 报表组件具有如下特点:
1、适用范围广:VB.NET、C#、VB、VC、Delphi、C++Builder、VFP、易语言等一切支持 COM 的开发工具。
2、功能强大:实现普通格式报表、表格报表、多层表头、票据套打、交叉表等各种报表非常简便;报表完全可编程定义,非常适合开发通用软件中的动态报表。
3、独有的报表查询显示功能:除了提供报表的打印、打印预览、数据导出等功能,还提供独有的报表查询显示功能,既提供报表查询与输出的集成一次性实现,又能保证数据的一致性与完整性。
4、特有的分组单元格合并功能,轻松实现常见的中国式报表分组在列中展现并垂直居中。
5、提供图表功能,在报表中直接实现图表功能。包括:饼图、叠加饼图、柱状图,连线图、散列点图等。
6、报表数据导出格式丰富,格式包括:Excel、PDF、图像、HTML、文本,CSV 等。
7、提供脚本编程功能,直接在报表模板中自定义报表为,采用通用的 VBScript 与 JScript 脚本引擎。
8、支持参数化报表查询SQL语句,轻松实现动态过滤条件筛选报表数据。
9、报表查询显示时提供报表内容文字查找功能。
10、全中文界面,针对中国报表进了很多专门实现,如:报表表格线、财务金额线、大写金额、发票打印圆圈中画叉图标、负数红字显示、多层表头等。很多在国外报表控件中很难实现的功能在本报表控件中可以轻易实现。
11、组件提供丰富交互事件,轻松实现报表穿透(透视)查询和报表交互。
12、重新发布简单:只需分发两个 DLL 文件。
13、易学易用:完全可视化设计,完善的复制/剪切/粘贴(Copy/Cut/Paste)和恢复重做(Undo/Redo)功能,专业的拖放操作与即时编辑功能。
14、编写了完整详尽的帮助文档。提供了丰富例程,包括VB.NET、C#、VB、VC、Delphi、C++Builder、VFP、中文编程易语言。
15、为 Delphi、C++Builder 编写专门的包装类,象使用 VCL 控件一样使用 Grid++Report。
16、支持所有常规条形码,打印条形码精度高易读取。

Grid++Report 网站:http://www.rubylong.cn
Grid++Report V4.5 下载地址:http://www.rubylong.cn/Download/Grid++Report4.5cn.zip
Grid++Report是一款C/S与B/S集成报表工具,功能全面易学易用。C/S开发适用于VB.NET, C#, VB, VC, Delphi, BCB, 易语言等。B/S开发适用于ASP.NET, ASP, PHP, JSP(Java)等,支持所有操作系统服务器与WEB服务器。开发C/S报表与B/S报表共享相同的开发知识与设计资源。提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发工具。提供详尽帮助文档与各种编程平台下的丰富例子,安装中包括可直接运例子程序,安装后即刻体验此报表工具。Unicode编码,多国语言集成支持。历经数年发展,多家有影响力的通用软件厂商选用,用户遍布各各业,已经成为用户受众面最广的国产报表工具。 Grid++Report 报表组件具有如下特点: 1、支持C/S报表与B/S报表开发,支持全部主流开发语言。C/S开发:VB.NET、C#、VB、VC、Delphi等,B/S开发:ASP.NET、ASP、PHP、JSP等,支持所有WEB服务器。 2、多国语言集成支持与UNICOD E编码支持,方便开发多国语言软件。 3、功能强大,稳定高效:实现表格报表、多层表头、票据套打、交叉表等各种报表非常简便;报表完全可编程定义,适合开发通用软件中的动态报表。 4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都可以作为报表数据源。 6、提供图表功能,包括:饼图、叠加饼图、柱状图、气泡图、折线图、曲线图、散列点图等,支持三维图形。 7、报表数据导出格式丰富,格式包括:Excel、RTF、PDF、图像、HTML、文本,CSV 等。 8、支持数十种一维条码,支持PDF417与QRCode这两种最常用的二维条码,条码打印精度高且易读取。 9、提供脚本编程功能,直接在报表模板中自定义报表为,采用通用的JScript与VBScript脚本引擎。 10、特有的分组单元格合并功能,轻松实现常见的中国式报表分组在列中展现并垂直居中要求。 11、全中文界面,针对中国式报表进了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松实现报表为自定义、穿透(透视)查询和报表交互。 13、重新发布简单:C/S报表只需分发两个DLL文件;B/S报表只要在WEB服务器布署报表网页与报表插件安装包,服务端不需其它配置,客户端零配置。 14、易学易用:完全可视化设计,完善的复制/剪切/粘贴(Copy/Cut/Paste)和恢复重做(Undo/Redo)功能,专业的拖放操作与即时编辑功能。 15、编写了完整详尽的帮助文档。提供了丰富例程,C/S报表包括VB.NET、C#、VB、VC、Delphi、C++Builder、VFP、中文编程易语言,B/S报表包括ASP.NET,ASP,PHP,JSP。 Grid++Report 网站:http://www.rubylong.cn Grid++Report 演示:http://www.rubylong.cn/WebReport

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧