C# DataGridView合并单元格打印的问题

我用网上介绍的办法,实现了DataGridView单元格的合并。
http://www.cnblogs.com/peterzb/archive/2009/05/29/1491891.html
就是这个方法

现在的问题是,我想把这个包含合并单元格格式的datagridview打印出来,用了各种办法都不行,打印出来的都是没有合并单元格的样子,求解决办法!谢谢

或者,怎么把导出到EXCEL,保留合并单元格,我用EXCEL打印也是可以的

1个回答

你有没有仔细看你用的方法实现的原理?它不过是通过单元格重绘实现的,本质上无非就是在dgv正常显示后通过绘图改变你看到的样子仿佛合并了,当然对于打印来说没有一点点用处。
你要想打印输出也合并单元格,要么在打印的时候自己绘制表格和表格线,但是估计以你的水平比较难。那么你可以使用报表控件或者第三方的网格。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# DataGridView 合并单元格
C# DataGridView 合并单元格
winform下datagridview合并单元格代码(c#)
我在winform下做一个程序,需要将datagridview格式做成下面样式,如何做,请教各位?rnID | TYPE | COLUMNSrn---------------------rn1 | A | 3rn---------------------rn2 | A | 4rn---------------------rn3 | A | 3rn---------------------rn4 | B | 5rn---------------------rn5 | A | 3rn---------------------rnrn做成rnrnID | TYPE | COLUMNSrn---------------------rn1 | | 3rn---- ---------rn2 | A | 4rn---- ---------rn3 | | 3rn---------------------rn4 | B | 5rn---------------------rn5 | A | 3rn---------------------
datagridview 合并单元格问题
在这里看了些资料,rnhttp://www.cnblogs.com/peterzb/archive/2009/05/29/1491891.htmlrn使用rowmergeview做单元格合并和二维表头,rn[img=https://img-bbs.csdn.net/upload/201306/18/1371520694_176905.png][/img]rn前两列都可以,第三列数字列却合并不了,试了好久,有没有谁用过这个控件?指条明路啊!rn下面是代码rn[code=csharp]rn private void dgvColumnsBindC()rn rn this.rmvItem.EnableHeadersVisualStyles = false;rn this.rmvItem.AutoGenerateColumns = false;rn this.rmvItem.Columns.Clear();//列头清空下rnrn Dictionary dataText = new Dictionary();rn dataText.Add("ItemName", "考核类型");rn dataText.Add("IName", "考核项目");rn dataText.Add("Weights", "权重");rn dataText.Add("Description", "考核明细");rn dataText.Add("Scores", "分值");rnrn foreach (KeyValuePair kvp in dataText)rn rn DataGridViewTextBoxColumn dgvc = new DataGridViewTextBoxColumn();rn dgvc.DataPropertyName = kvp.Key;rn dgvc.HeaderText = kvp.Value;rn dgvc.Name = kvp.Key;rn dgvc.ReadOnly = true;rn if (kvp.Value == "权重" || kvp.Value == "分值") dgvc.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;rn if (kvp.Value == "考核类型" || kvp.Value == "考核项目") dgvc.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;rn if (kvp.Value == "考核明细") dgvc.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;rn dgvc.HeaderCell.Style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//居中rn dgvc.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;rn if (kvp.Value == "权重" || kvp.Value == "分值") dgvc.Width = 80;rn if (kvp.Value == "考核类型" || kvp.Value == "考核项目") dgvc.Width = 150;rn if (kvp.Value == "考核明细" ) dgvc.Width = 430;rnrn this.rmvItem.Columns.Add(dgvc);rn rnrn this.rmvItem.MergeColumnNames.Add("ItemName");rn this.rmvItem.MergeColumnNames.Add("IName");rn this.rmvItem.MergeColumnNames.Add("Weights");rn rn[/code]
C# 重写datagridview(合并单元格与列头)
实现同列相同单元格值的合并与统一列头的归类
datagridview 合并单元格的问题
在CellPainting进行合并单元格时,虽然达到了合并单元格的效果,但是合并后我rn要显示的内容长于单元格的长度,后面的显示不出来了,rn例如:我合并了3个单元格,然后想在这个合并的三单元格中重新显示内容,这个内容rn比每个单元格都长。结果,内容只能在原来的第一个单元格能显示,后面都显示不了。rn求问,如何解决。
datagridview 合并单元格问题【WINFORM】
rnrn[img=http://hi.csdn.net/attachment/201105/11/11476_13050946802XW2.jpg][/img]rnrn第三行显示有问题,是横着显示数据的。rnrn我想把rnrn[img=http://hi.csdn.net/attachment/201105/11/11476_1305094703b9og.jpg][/img]rnrn对应它上一级的合并单元格竖着显示rnrn怎么做?rnrn
DataGridView合并单元格出现的问题
在CellPainting进行合并单元格时,虽然达到了合并单元格的效果,但是我希望合并后的内容显示能够超过1个单元格的宽度或高度。rnrne.Graphics.DrawString(CType(e.Value, String), Myfont, Brushes.Black, e.CellBounds.X, e.CellBounds.Y, StringFormat.GenericDefault)rnrn仅仅能够显示一个单元格的长宽范围的内容。rnrn[b][color=#FF0000]目前我的需要是超过一个单元格范围。[/color][/b]rnrn
关于datagridview 合并单元格的问题
C#新手,问点问题,求理解rnrn已使用datatable 将数据库中的数据显示到datagirdview 上。rnrn想要的功能是:rnrn如图rnrn |a | b | c | d | rn1|1 1 1 1rn2|2 2 2 2rn3|3 3 3 3rnrnrn在表中添加一空行,不是表尾rnrn |a | b | c | d | rn1|1 1 1 1rn4| rn2|2 2 2 2rn3|3 3 3 3rnrn再将行4的 列a 、b 、c和行1合并,但列d不合并rnrn |a | b | c | d | rn1|1 1 1 1rn4| 4 rn2|2 2 2 2rn3|3 3 3 3rnrn希望能得到各位大大的帮助,例子、思路、方法。。。rnrn
DATAGRIDVIEW合并单元格问题(winform)
DATAGRIDVIEW合并单元格问题(winform),谢谢。
DataGridView合并单元格
可实现对DataGridView单元格的合并,可按行合并,也可按列合并,格式按左侧格式或上面格式定义。
datagridview合并单元格
我用vb.net 2008,数据库用sql2008 制作了一个类似excel的表格,现在想实现 让用户合并单元格(与excel合并一样的功能),在网上搜集了很多资料,试了很多办法都没有实现,期待高手的指点。
datagridview 合并单元格
下面的代码实现静态的单元格合并(整列的单元格合并),但是我想实现的是如果上下行的第一列数据相同,只显示一行,如果不相同,两行都显示,不知道该如何改动?请不吝赐教。先谢谢了!(最终效果如下图)rn rn[u]70,000 | 70,000 1 rn50,000 | 50,000 1 [/u]rn     |  [u] 2 [/u]     rn |   3 rn[u]100,000| 100,000 1 rn20,000 | 20,000 1 rn100 |100 1 [/u] rnrn rn静态的单元格合并代码如下rnPublic Class Form1rnrn Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadrn Dim cola As New DataGridViewRolloverCellColumn()rn Dim colb As New DataGridViewRolloverCellColumn()rn Dim colc As New DataGridViewRolloverCellColumn()rn Dim cold As New DataGridViewRolloverCellColumn()rn DataGridView1.Columns.Add(cola)rn DataGridView1.Columns(0).Name = "a"rn DataGridView1.Columns.Add(colb)rn DataGridView1.Columns(1).Name = "b"rn DataGridView1.Columns.Add(colc)rn DataGridView1.Columns(2).Name = "c"rn DataGridView1.Columns.Add(cold)rn DataGridView1.Columns(3).Name = "d"rn DataGridView1.Rows.Add(New Object() "A1", "B1", "C1", "D1")rn DataGridView1.Rows.Add(New Object() "A2", "B2", "C2", "D2")rn DataGridView1.Rows.Add(New Object() "A3", "B3", "C3", "D3")rn End Subrn ' GridViewCustomCell.vbrn 'This class will used at the data is filled to dataGridView. rn 'It is replace the default textboxcell. '******************************************* rn Public Class GridViewCustomCellrn Inherits DataGridViewTextBoxCellrn Private lisDoubleLeftLine As Booleanrn Private lisSigTopLine As Booleanrn Private lisSigButtomLine As Booleanrn '''' ''' ''' ''' ''' ''' '''rn '''' rn Public Sub New()rn 'ByVal isDoubleLeftLine_In As Boolean, _ '这个参数一加就挂,所以把它们屏蔽掉了rn 'ByVal isSigTopLine_In As Boolean, _rn 'ByVal isSigButtomLine_In As Boolean _rn ')rn 'lisDoubleLeftLine = isDoubleLeftLine_Inrn 'lisSigTopLine = isSigTopLine_Inrn 'lisSigButtomLine = isSigButtomLine_Inrn End Subrn Public Sub myLine( _rn ByVal isDoubleLeftLine_In As Boolean, _rn ByVal isSigTopLine_In As Boolean, _rn ByVal isSigButtomLine_In As Boolean _rn )rn lisDoubleLeftLine = isDoubleLeftLine_Inrn lisSigTopLine = isSigTopLine_Inrn lisSigButtomLine = isSigButtomLine_Inrn End Subrnrn ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' borderStylePlaceHolder ''' rn ''' rn Public Overrides Function AdjustCellBorderStyle( _rn ByVal borderStyleInput_In As DataGridViewAdvancedBorderStyle, _rn ByVal borderStylePlaceHolder_In As DataGridViewAdvancedBorderStyle, _rn ByVal verticalBorderAdded_In As Boolean, _rn ByVal horizontalBorderAdded_In As Boolean, _rn ByVal firstVisibleColumn_In As Boolean, _rn ByVal firstVisibleRow_In As Boolean _rn ) As DataGridViewAdvancedBorderStylern If lisDoubleLeftLine = True Thenrnrn borderStylePlaceHolder_In.Left = _rn DataGridViewAdvancedCellBorderStyle.InsetDoublern Elsern borderStylePlaceHolder_In.Left = _rn DataGridViewAdvancedCellBorderStyle.Nonern End Ifrn borderStylePlaceHolder_In.Right = _rn borderStyleInput_In.Rightrn If lisSigTopLine = True Thenrnrn borderStylePlaceHolder_In.Top = _rn borderStyleInput_In.Toprn Elsern borderStylePlaceHolder_In.Top = _rn DataGridViewAdvancedCellBorderStyle.Nonern End Ifrn If lisSigButtomLine = True Thenrnrnrn borderStylePlaceHolder_In.Bottom = _rn borderStyleInput_In.Bottomrn Elsern borderStylePlaceHolder_In.Bottom = _rn DataGridViewAdvancedCellBorderStyle.Nonern End Ifrn Return borderStylePlaceHolder_Inrn End Functionrn End Classrnrn Public Class DataGridViewRolloverCellColumnrn Inherits DataGridViewColumnrn Public Sub New()rn 'ByVal isDoubleLeftLine_In As Boolean, _rn 'ByVal isSigTopLine_In As Boolean, _rn 'ByVal isSigButtomLine_In As Boolean _rn ')rn Me.CellTemplate = New GridViewCustomCell()rn 'False, _rn 'False, _rn 'False)rn End Subrnrn End Classrnrn
DataGridView 合并单元格
[img=http://img.my.csdn.net/uploads/201211/12/1352725633_1019.jpg][/img]rn如图 项目里需要将列中的相同值的单元格进行合并 rn但合并也要与前面的小区相关联不是一个小区的单元不需要合并。rn本人菜鸟~程序里实现的时候却怎么也做不出来,都不能与前面的小区关联,只能整个一列相同的合并!rn请各位大虾,多多赐教。项目时间紧张,请多多顶起[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/27.gif][/img]
DataGridView合并单元格、分页显示、页面设置、打印、Excel导出
用C#写的实现DataGridView合并单元格、分页显示、页面设置、打印和Excel导出功能,精典实例,可以直接使用。如在使用过程中有问题或改进,可以发Email:liubingchao@126.com;互相交流与学习。
c#关于Datagridview打印问题
Font font = new Font("Tahoma", 16, FontStyle.Regular);//设置画笔rn Font font2 = new Font("宋体", 25, FontStyle.Bold);rn Brush bru = Brushes.Blue;rn Pen pen = new Pen(bru);rn Graphics g = e.Graphics;rn pen.Width = 1;rn //设置各边距rnrn int nLeft = e.PageSettings.Margins.Left;rn int nTop = e.PageSettings.Margins.Top;rn int nRight = e.PageSettings.Margins.Right;rn int nBottom = e.PageSettings.Margins.Bottom;rn int nWidth = e.PageSettings.PaperSize.Width - nRight - nLeft;rn int nHeight = e.PageSettings.PaperSize.Height - nTop - nBottom;rn //打印各边距rn //e.Graphics.DrawLine(pen, nLeft, nTop, nLeft, nTop + nHeight);rn //e.Graphics.DrawLine(pen, nLeft+nWidth, nTop, nLeft+nWidth, nTop + nHeight);rn //e.Graphics.DrawLine(pen, nLeft, nTop, nLeft+nWidth, nTop);rn //e.Graphics.DrawLine(pen, nLeft, nTop+nHeight, nLeft + nWidth, nTop+nHeight);rn //在离左边距20,右边距20的位置打印haha xixirnrn g.DrawString("haha xixi:", font, bru, nLeft + 20, nTop + 100);//如果要打印datagridView在这里遍历便可rnrn是自己画的一个表格然后直接打印出来,请问怎么个遍历啊?
dataGridView通过重绘合并单元格的问题
[code=C#] private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)rn rn // 对第1列相同单元格进行合并rn if (e.ColumnIndex == 0 && e.RowIndex != -1)rn rn usingrn (rn Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),rn backColorBrush = new SolidBrush(e.CellStyle.BackColor)rn )rn rn using (Pen gridLinePen = new Pen(gridBrush))rn rn // 清除单元格rn e.Graphics.FillRectangle(backColorBrush, e.CellBounds);rnrn // 画 Grid 边线(仅画单元格的底边线和右边线)rn // 如果下一行和当前行的数据不同,则在当前的单元格画一条底边线rn if (e.RowIndex < dataGridView1.Rows.Count - 1 &&rn dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() != rn e.Value.ToString())rn e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,rn e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,rn e.CellBounds.Bottom - 1);rn // 画右边线rn e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,rn e.CellBounds.Top, e.CellBounds.Right - 1,rn e.CellBounds.Bottom);rnrn // 画(填写)单元格内容,相同的内容的单元格只填写第一个rn if (e.Value != null)rn rn if (e.RowIndex > 0 &&rn dataGridView1.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() == rn e.Value.ToString())rn rn elsern rn e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,rn Brushes.Black, e.CellBounds.X + 2,rn e.CellBounds.Y + 5, StringFormat.GenericDefault);rn rn rn e.Handled = true;rn rn rn rn[/code]rn帮忙看看上面的代码,编译在这句// 如果下一行和当前行的数据不同,则在当前的单元格画一条底边线rn if (e.RowIndex < dataGridView1.Rows.Count - 1 &&rn dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() != rn e.Value.ToString())提示出错,逻辑上 没什么问题啊,提示有个对象为实例化,我猜测毛病处在最后一个单元格的绘制上,但是我找不出毛病在哪里,请大家帮忙看看.
C#打印DataGridView和打印窗体
C#打印DataGridView的内容和打印整个窗体 两个例子直接复制即可运行
C#打印预览和打印datagridview
C#打印预览和打印datagridview
c# 打印datagridview 类
c# 打印datagridview 类,可实现打印datagridview 内容
C#打印DataGridView的代码
使用C#打印DataGridView的代码,老外写的非常好用
c# datagridview 打印
我的datagridview里有不同类型的数据,我要怎么做才能根据不同的类型在不同的页上打印,如:rn[color=#FF0000]市场类:就把市场类的商品打印出来 rn制作类:就在下一张纸上把制作类的商品打印出来。 [/color]rn
C# DataGridView打印
C# DataGridView 打印,包含两个压缩包,一个源码,一个可执行程序
Datagridview打印程序(c# )
对Datagridvidw内容进行打印,可以选择行,列,并可预览。
c#打印datagridview数据
一个C#的打印程序,做成了dll文件,是在别人的基础上添加了自动调整行高和可选择性的汇总
C#如何打印DataGridView?
有没有简单一点的例子?
打印DataGridView表格 C#
对于需要打印DataGridView表格的窗口,提供简便的打印方法
C#打印DataGridView实例
通过C#(winform)技术将datagridview中的数据打印出来,还是非常牛逼的,希望大家喜欢
C#打印DataGridView
用printDocumnet打印 文本控件都是直接e.Graphics.DrawString();rnrn我现在需要打印一个DataGridView 则么打印啊?rnrn
经典C# DataGridView打印
经典C# DataGridView打印,可以c#,打印,打印预览 datagridview 及其 简单实例
帮帮忙!C#打印DataGridView
C#中如何打印DataGridView中数据并能每页打印特定行,在每页上都打印有标题及页码?
C# datagridview 打印 换行
请问:rn 1.单元格宽度不满足打印内容时(超过10个字符)就进行换行。rn 2.同时单元格的高度也根据换行进行加高。
c# DataGridView打印程序!
是C# WinFrom 程序,具有DataGridView 打印功能,可以打印表头和内容,自动分页。
C#打印 DataGridView 控件
近段时间看到很多在路上的朋友都在找这个 我也偶尔在别的地方下载来看了下别人写的东西 感觉不是这缺就是那少 都不大完美 这段 C# DataGridView 控件内容打印代码 是经本人在VS2008下测试通过 可以实现对DataGridView绑定的记录进行打印预览及打印的 代码简明扼要 我连DataGridView数据绑定都一起写了 想要三层实现的童鞋可联系俺) 也有说明 希望你会喜欢 ">近段时间看到很多在路上的朋友都在找这个 我也偶尔在别的地方下载来看了下别人写的东西 感觉不是这缺就是那少 都不大完美 这段 C# DataGridView 控件内容打印代码 是经本人在VS2008下测试通过 可以实现对DataGridView绑定 [更多]
C# DataGridView 实现合并单元格,和Excel一样
C#的控件DataGridView能否实现合并单元格,类似Excel样式?
Datagridview里的合并单元格和自动换行
首先我是读取excel然后存在dataset里放进datagridview,然后因为excel文件中有一些合并单元格的列,所以我用了DataGridViewCellPaintingEventArgs 绘制表格,产生合并单元格的效果rn给一下我参考的代码rn[code=csharp]rn public void dgCellPainting(DataGridView dgStandard, string strColumnName, DataGridViewCellPaintingEventArgs e)rn rn if (dgStandard.Rows.Count > 0)rn rnrn if (dgStandard.Rows[0].Cells[0].Value.ToString().Trim() != string.Empty)rn rn tryrn rn if (dgStandard.Columns[strColumnName].Index == e.ColumnIndex && e.RowIndex >= 0)rn rn using (rn Brush gridBrush = new SolidBrush(dgStandard.GridColor),rn backColorBrush = new SolidBrush(e.CellStyle.BackColor))rn rn using (Pen gridLinePen = new Pen(gridBrush))rn rn // 擦除原单元格背景rn e.Graphics.FillRectangle(backColorBrush, e.CellBounds);rnrn if (e.RowIndex != dgStandard.RowCount - 1)rn rn if (e.Value.ToString() != dgStandard.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString())rn rn e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1,rn e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);//下边缘的线 rn rn rn elsern rn e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1,rn e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);//下边缘的线 rn rnrn //右侧的线rn e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, //x1,y1,x2,y2rn e.CellBounds.Top, e.CellBounds.Right - 1,rn e.CellBounds.Bottom - 1);rnrn if (e.RowIndex == 0)rn rn //绘制值rn if (e.Value != null)rn rnrn e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,rn Brushes.Crimson, rn e.CellBounds.X +(e.CellBounds.Width - e.Graphics.MeasureString(e.Value.ToString().Trim(), e.CellStyle.Font).Width)/2,rn e.CellBounds.Y + 2, StringFormat.GenericDefault);rn rn rn elsern rn if (e.Value.ToString() != dgStandard.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString())rn rn //绘制值rn if (string.IsNullOrEmpty(e.Value.ToString().Trim()).Equals(false))rn rn e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,rn Brushes.Crimson, e.CellBounds.X + (e.CellBounds.Width - e.Graphics.MeasureString(e.Value.ToString().Trim(), e.CellStyle.Font).Width) / 2,rn e.CellBounds.Y + 2, StringFormat.GenericDefault);rn rn rn rnrn e.Handled = true;rn rn rn rn rn catch rn rn rn rn[/code]rn同时因为某些表格的字数又比较多,所以又用了自动换行rn[code=csharp]rn//设置自动换行rn this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;rn //设置自动调整高度rn this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;[/code]rnrn然而这里就产生了一个问题,如果我没有用DataGridViewCellPaintingEventArgs 绘制表格表达合并单元格效果,自动换行是生效的。但是如果我用了绘制表格的效果,行的大小是会改变,但是文字是没有自动换行的,求大神解答。
DataGridView二维表头与合并单元格
DataGridView二维表头与合并单元格
DataGridView二维表头和合并单元格
DataGridView二维表头和合并单元格 实现二维的合并表头,以及数据行单元格合并
DataGridView怎样合并单元格?
ru ti
datagridview合并单元格并保存
datagridview合并单元格后怎样保存为Excel!我保存之后还是原来没合并的情况rnrn求高手啊 !rn
dataGridView合并单元格实例
dataGridView,合并单元格,实例,横向,纵向demo
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表