C#.NET DataGridView单元格合并问题

问题描述

C#.NETDataGridView请各位大虾帮帮忙,我想在已经数据的DataGridView上,把同一列下相同的单元格合并,有什么办法吗?请指教,或者有相关单元格合并的例子,可以参考一下!

解决方案

解决方案二:
"#region"合并单元格的测试"privateintnextrow=null;privateintnextcol=null;privatevoiddataGridView1_CellFormatting(objectsender,System.Windows.Forms.DataGridViewCellFormattingEventArgse){if(this.dataGridView1.Columns["description"].Index==e.ColumnIndex&&e.RowIndex>=0){if(this.nextcol!=null&e.ColumnIndex==this.nextcol){e.CellStyle.BackColor=Color.LightBlue;this.nextcol=null;}if(this.nextrow!=null&e.RowIndex==nextrow){e.CellStyle.BackColor=Color.LightPink;this.nextrow=null;}if(e.RowIndex!=this.dataGridView1.RowCount-1){if(e.Value.ToString()==this.dataGridView1.Rows[e.RowIndex+1].Cells[e.ColumnIndex].Value.ToString()){e.CellStyle.BackColor=Color.LightPink;nextrow=e.RowIndex+1;}}}if(this.dataGridView1.Columns["name"].Index==e.ColumnIndex&&e.RowIndex>=0){if(e.Value.ToString()==this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex+1].Value.ToString()){e.CellStyle.BackColor=Color.LightBlue;nextcol=e.ColumnIndex+1;}}}//==========================//绘制单元格privatevoiddataGridView1_CellPainting(objectsender,System.Windows.Forms.DataGridViewCellPaintingEventArgse){//纵向合并if(this.dataGridView1.Columns["description"].Index==e.ColumnIndex&&e.RowIndex>=0){using(BrushgridBrush=newSolidBrush(this.dataGridView1.GridColor),backColorBrush=newSolidBrush(e.CellStyle.BackColor)){using(PengridLinePen=newPen(gridBrush)){//擦除原单元格背景e.Graphics.FillRectangle(backColorBrush,e.CellBounds);/**/////绘制线条,这些线条是单元格相互间隔的区分线条,////因为我们只对列name做处理,所以datagridview自己会处理左侧和上边缘的线条if(e.RowIndex!=this.dataGridView1.RowCount-1){if(e.Value.ToString()!=this.dataGridView1.Rows[e.RowIndex+1].Cells[e.ColumnIndex].Value.ToString()){e.Graphics.DrawLine(gridLinePen,e.CellBounds.Left,e.CellBounds.Bottom-1,e.CellBounds.Right-1,e.CellBounds.Bottom-1);//下边缘的线//绘制值if(e.Value!=null){e.Graphics.DrawString((String)e.Value,e.CellStyle.Font,Brushes.Crimson,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}}}else{e.Graphics.DrawLine(gridLinePen,e.CellBounds.Left,e.CellBounds.Bottom-1,e.CellBounds.Right-1,e.CellBounds.Bottom-1);//下边缘的线//绘制值if(e.Value!=null){e.Graphics.DrawString((String)e.Value,e.CellStyle.Font,Brushes.Crimson,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}}//右侧的线e.Graphics.DrawLine(gridLinePen,e.CellBounds.Right-1,e.CellBounds.Top,e.CellBounds.Right-1,e.CellBounds.Bottom-1);e.Handled=true;}}}//横向合并if(this.dataGridView1.Columns["name"].Index==e.ColumnIndex&&e.RowIndex>=0){using(BrushgridBrush=newSolidBrush(this.dataGridView1.GridColor),backColorBrush=newSolidBrush(e.CellStyle.BackColor)){using(PengridLinePen=newPen(gridBrush)){//擦除原单元格背景e.Graphics.FillRectangle(backColorBrush,e.CellBounds);if(e.Value.ToString()!=this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex+1].Value.ToString()){//右侧的线e.Graphics.DrawLine(gridLinePen,e.CellBounds.Right-1,e.CellBounds.Top,e.CellBounds.Right-1,e.CellBounds.Bottom-1);//绘制值if(e.Value!=null){e.Graphics.DrawString((String)e.Value,e.CellStyle.Font,Brushes.Crimson,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}}//下边缘的线e.Graphics.DrawLine(gridLinePen,e.CellBounds.Left,e.CellBounds.Bottom-1,e.CellBounds.Right-1,e.CellBounds.Bottom-1);e.Handled=true;}}}}#endregion

解决方案三:
dingy8ixia
解决方案四:
楼主看下这个.前几天查这个问题的看到了这个贴.比较不错`

时间: 2024-09-16 22:06:27

C#.NET DataGridView单元格合并问题的相关文章

DataGridView单元格合并

本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码   也可以参考: http://www.cnblogs.com/liuke209/archive/2006/11/28/463023.html

扩展方法(2) GridView单元格合并

大家GridView都用的比较多吧..有没遇到单元格需要合并的需求.. 单元格合并原理其实很简单,就是逐行判断要合并的单元格里的值是否和上一行的相同,要是相同的 话就合并,不同的话就接着判断 我们可以通过扩展方法为GridView添加单元合并 public static class GridViewExtensions { /// <summary> /// GridView行合并 /// </summary> /// <param name="gridView&q

excel公式把100单元格合并起来

  如果需要把A1:A2的内容合并起来,可以用公式 =A1&A2 如果需要把A1:A3的内容合并起来,可以用公式 =A1&A2&A3 如果把A1:A100的单元格合并起来呢? =A1&A2&A3... 公式太长了... 其实....不需要这样的.有一个神秘的函数可以帮我们解决: =PHONETIC(A1:A100) 利用phonetic函数就可以把前100行的内容连接到一起了. 如果,你在每个字符中间加个分隔号,如",",那就增加一个辅助列,在输

OpenXml 单元格合并后Word打开提示错误

问题描述 OpenXml 单元格合并后Word打开提示错误 string path = @"D:newdoc.docx" ; WordprocessingDocument doc = WordprocessingDocument.Create(path, WordprocessingDocumentType.Document) MainDocumentPart mainpart = doc.AddMainDocumentPart(); mainpart.Document = new D

Devexpresss 的Xtrareport 内容单元格合并问题

问题描述 Devexpresss 的Xtrareport 内容单元格合并问题 我知道: Xtrareport 里面的单元格属性可以设置成:processDuplicatesMode:merge这样就可以使某一列相同的数据的值 合并. 如果我想 在第一次合并的结果集中再二次合并呢? 举个例子 ID Name1 as1 as2 as2 as想得到如下的结果: 1 | as--|---2 |as 而不是: 1 | --| AS2 | 谢谢大家!怎么做?

vb.net datagridview 单元格点击事件的问题

问题描述 vb.net datagridview 单元格点击事件的问题 我想点击改变入出力的值,点击初始化时的入出力会变成1,再点击变成女数值2,还要使 入出力一行的checkbox可以点击选择和取消.怎样做到datagridview中header数值的变化和checkbox的选中与取消 解决方案 [VB.NET]关于datagridview的两个问题![VB.NET]关于datagridview数据绑定菜鸟问题!! 解决方案二: http://bbs.csdn.net/topics/36018

设置DataGridView单元格的数据类型

问题描述 如何设置DataGridView单元格的数据类型 解决方案 解决方案二:没明白你的意思.解决方案三:设置DataGridView单元格的数据类型?你想做什么..解决方案四:dgvparent.Rows[i].Cells["ColHUB1PERCENT"].ValueType=typeof(String);

openxml-OpenXml 单元格合并后Word打开提示错误

问题描述 OpenXml 单元格合并后Word打开提示错误 public static OutputStream creatWord(ArrayList<String> imageUrllist,String[] names,OutputStream os) { int imageSize = imageUrllist.size(); try { //word模板的路径 CustomXWPFDocument doc = new CustomXWPFDocument(new FileInputS

flex AdvancedDataGrid 实现单元格合并行(或者其他方法能实现)求助大神!!!

问题描述 flex AdvancedDataGrid 实现单元格合并行(或者其他方法能实现)求助大神!!! 解决方案 2013.12.04 JS实现单元格的合并Javascript实现合并单元格使用XtraGrid实现合并单元格 解决方案二: 额,虽然都用不上,但还是谢谢你!