C#Winform中DataGridView合并单元格的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Winform中DataGridView合并单元格的问题?相关的知识,希望对你有一定的参考价值。
我合并4列单元格位1列,合并好后,当点击前面3个单元格时,会出现如下情况:原来单元格中的内容会显示出来,并且此单元格位选中状态,请问该如何解决,谢谢
代码:if (e.ColumnIndex == 3)
Rectangle re = new Rectangle(e.CellBounds.Left - dataGridView2.Columns[0].Width - dataGridView2.Columns[1].Width - dataGridView2.Columns[2].Width,
e.CellBounds.Top, e.CellBounds.Width + dataGridView2.Columns[0].Width + dataGridView2.Columns[01].Width + dataGridView2.Columns[2].Width,
e.CellBounds.Height);
e.Graphics.FillRectangle(Brushes.Yellow, re);
Pen pen = new Pen(dataGridView2.BackgroundColor, 1);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
e.Graphics.DrawLine(pen, re.X, re.Y + re.Height - 1, re.X + re.Width, re.Y + re.Height - 1);
e.Graphics.DrawLine(pen, re.X + re.Width - 1, re.Y, re.X + re.Width - 1, re.Y + re.Height);
SizeF strSize = e.Graphics.MeasureString(dataGridView2.Rows[e.RowIndex].Cells[0].Value.ToString(), dataGridView2.Font);
e.Graphics.DrawString(dataGridView2.Rows[e.RowIndex].Cells[0].Value.ToString(), dataGridView2.Font,
Brushes.Black, re.X + (re.Width - strSize.Width) / 2, re.Y + (re.Height - strSize.Height) / 2); e.Handled = true;
请注意:我合并的不是表头列,是数据列
只会在第三列触发的Paint事件中调用,也就是说,如果点击ColumnIndex =2的单元格触发Paint时,你的代码不起作用,会实用dataGridView2的默认样式绘制.
e.CellBounds,因为上面是第三列所以e.CellBounds始终是第三列的Bounds
--参考
if(e.ColumnIndex>=0&&e.ColumnIndex < 4 && e.RowIndex == 2)
Rectangle re =dataGridView1.GetCellDisplayRectangle(0,e.RowIndex,false);
re.Width = re.Width + dataGridView1.Columns[1].Width + dataGridView1.Columns[2].Width + dataGridView1.Columns[3].Width;
e.Graphics.FillRectangle(Brushes.Yellow,re);
Pen pen = new Pen(dataGridView1.BackgroundColor,1);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
e.Graphics.DrawLine(pen,re.X,re.Y + re.Height - 1,re.X + re.Width,re.Y + re.Height - 1);
e.Graphics.DrawLine(pen,re.X + re.Width - 1,re.Y,re.X + re.Width - 1,re.Y + re.Height);
SizeF strSize = e.Graphics.MeasureString(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(),dataGridView1.Font);
e.Graphics.DrawString(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(),dataGridView1.Font,
Brushes.Black,re.X + (re.Width - strSize.Width) / 2,re.Y + (re.Height - strSize.Height) / 2); e.Handled = true;
追问
可以了,非常感谢
本回答被提问者采纳Winform DataGridView 合并一行单元格
具体需求是做一个通讯录,按部门分组。 合并的那一行是部门名称,在该部门所有员工的上面插入。(如图所示)
参考技术AWindows Forms DataGridView 没有提供合并单元格的功能,要实现合并单元格的功能就要在CellPainting事件中使用Graphics.DrawLine和 Graphics.DrawString 自己来“画”。
参考:
http://hi.baidu.com/anymis/item/ba9cfd1c6fd414f99d778a4e具体思路:
绑定DataGridView前,先把所有需要合并的行号记录到一个数组变量中
调用DataGridView的Bind方法后,会触发CellPainting事件
在CellPainting事件中,先判断行号是否在数组中
如果在数组中,清除单元格、修改背景色、仅绘制上下边框线
再判断是否为第一列(e.ColumnIndex为0)
如果为第一列,设置单元格的内容为部门名称(e.Value = “...”)
参考技术B 在后台吧数据赋值给 DataTable然后给 DataTable 加一行 在把整个DataTable返回前台追问
是这样做的 问题是我想把这一行的单元格合并掉
以上是关于C#Winform中DataGridView合并单元格的问题?的主要内容,如果未能解决你的问题,请参考以下文章
winform dataGridView中如何添加单选按钮列?
哪位高手帮帮忙,winform datagridview单元格合并啊,谢谢了,解决问题了再加赏啊,谢谢
GJM:C# WinForm开发系列 - DataGridView 使用方法集锦