Windows Forms DataGridView 中合并单元格 做参考

Windows Forms DataGridView 中合并单元格

2007-03-29 14:06 by sunday, 3838 visits, 收藏, 编辑

Windows Forms DataGridView 没有提供合并单元格的功能,要实现合并单元格的功能就要在CellPainting事件中使用Graphics.DrawLine和 Graphics.DrawString 自己来“画”。

下面的代码可以对DataGridView第1列内容相同的单元格进行合并:
        private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            // 对第1列相同单元格进行合并
            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);

                        // 画 Grid 边线(仅画单元格的底边线和右边线)
                        //   如果下一行和当前行的数据不同,则在当前的单元格画一条底边线
                        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://hi.baidu.com/anymis/blog/item/e7ebc9544b871c58d00906f6.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VB.NET,可以使用DataGridView控件的CellMerge事件来合并单元。 首先,在窗体的设计器视图添加一个DataGridView控件。 然后,在代码视图,使用以下代码将DataGridView的CellMerge事件与一个自定义的事件处理程序相关联: ``` Private Sub DataGridView1_CellMerge(sender As Object, e As DataGridViewCellMergeEventArgs) Handles DataGridView1.CellMerge ' 自定义的合并单元逻辑 ' TODO: 在这里编写合并单元的代码 End Sub ``` 接下来,在自定义的事件处理程序,您可以使用以下代码来合并单元: ``` Private Sub DataGridView1_CellMerge(sender As Object, e As DataGridViewCellMergeEventArgs) Handles DataGridView1.CellMerge ' 获取当前要合并单元 Dim cell1 As DataGridViewCell = DataGridView1.Rows(e.RowIndex1).Cells(e.ColumnIndex1) Dim cell2 As DataGridViewCell = DataGridView1.Rows(e.RowIndex2).Cells(e.ColumnIndex2) ' 根据需要的合并方式进行处理 ' 例如,如果要按行合并,可以将该行的所有单元的值设置为相同的值 For i As Integer = e.RowIndex1 To e.RowIndex2 DataGridView1.Rows(i).Cells(e.ColumnIndex1).Value = cell1.Value Next ' 将单元设为不可见,以实现合并效果 cell2.Visible = False ' 确定合并后的单元的值,这是可选的 ' 您可以根据需要对合并后的单元进行自定义操作 Dim mergedValue As String = cell1.Value ' TODO: 在这里处理合并后的单元的值 End Sub ``` 在上面的代码,我们首先获取了要合并单元,并根据需要的合并方式进行处理。最后,将要合并单元设为不可见,以实现合并效果。您还可以根据需要对合并后的单元进行自定义操作。 注意:合并单元的具体逻辑会根据您的需求而有所不同。以上代码只是一个示例,您可能需要根据自己的需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值