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;
请注意:我合并的不是表头列,是数据列

参考技术A e.ColumnIndex == 3
只会在第三列触发的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 合并一行单元格

具体需求是做一个通讯录,按部门分组。 合并的那一行是部门名称,在该部门所有员工的上面插入。(如图所示)

参考技术A

Windows 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 合并一行单元格

哪位高手帮帮忙,winform datagridview单元格合并啊,谢谢了,解决问题了再加赏啊,谢谢

GJM:C# WinForm开发系列 - DataGridView 使用方法集锦

C# Winform DataGridView中实现二维表头

C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改