DataGridView 中合并单元格

简介: Windows Forms DataGridView 没有提供合并单元格的功能,要实现合并单元格的功能就要在CellPainting事件中使用Graphics.DrawLine和 Graphics.DrawString 自己来“画”。
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;这一句非常重要,必须加上,要不所画的内容就被后面的Painting事件刷新不见了!!!
                        e.Handled =  true;
                    }
                }
            }
目录
相关文章
|
算法 编译器
内存学习(七):伙伴分配器(正式版)1
内存学习(七):伙伴分配器(正式版)1
331 0
|
消息中间件 安全 API
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
SendMessage/PostMessage API 可以实现发送系统消息,这些消息可以定义为常见的鼠标或键盘事件、数据的发送等各种系统操作......
7365 1
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
|
文字识别 Java C++
Tesseract-OCR的简单使用与训练
Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)相比,我们可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。
6284 0
|
11月前
|
存储 Python
提升工作效率:获取任意月份的所有工作日
本文介绍了如何使用 Python 编写一个简单程序,以获取任意月份的所有工作日。通过 `datetime` 和 `calendar` 模块,程序能够准确地识别出每个月的周一至周五,帮助用户高效管理时间和任务。
318 6
|
Java Apache
Apache PDFbox快速开发指南
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/9026439 Apache PDFbox快速开发指南 作者:chszs,转载需注明。
3097 0
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
260 20
|
11月前
|
存储 JSON Go
如何在 Go 项目中隐藏敏感信息,比如避免暴露用户密码?
在Go语言开发中,用户信息管理常涉及敏感数据如密码的处理。为防止这些数据暴露给客户端,本文介绍了三种方法:使用JSON标签忽略字段、自定义序列化逻辑、使用数据传输对象(DTO),以确保用户数据的安全性。通过这些方法,可以有效控制数据输出,避免敏感信息泄露。
194 1
|
12月前
|
网络协议 安全 调度
关闭Windows自动更新的6种方法
本文介绍了六种关闭Windows自动更新的方法,包括使用服务管理器、组策略编辑器、修改注册表、任务计划程序、网络连接设置和命令行。
4387 0
|
Linux
【专栏】Linux系统中"cd"命令的使用技巧,包括基本用法
【4月更文挑战第28天】本文介绍了Linux系统中"cd"命令的使用技巧,包括基本用法(如切换到指定目录)、利用"."和".."、"~"符号,以及绝对路径和相对路径切换。还分享了高级技巧,如使用通配符、结合其他命令和在脚本中的应用。通过学习这些技巧,可提升工作效率,如快速切换到项目目录或最近使用的目录。
670 0