VS2019中WinForm的DataGridView分隔线颜色修改问题(.NET4.8)
解决DataGridView去掉边框并设置粗黑色行分隔线的问题
我明白你的困扰——DividerHeight只能调整行间距的高度,没法直接改变颜色,而默认的灰色分隔线靠GridColor调整但又没法变粗,确实容易卡壳。下面给你一套靠谱的解决方案:
第一步:彻底去掉控件边框
你之前的代码已经处理了单元格之间的边框,但还需要去掉控件本身的外边框,加上这一行:
dgv1.BorderStyle = BorderStyle.None;
配合你原来的代码,就能完全消除所有边框:
// 去掉单元格之间的边框 dgv1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None; dgv1.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; dgv1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; dgv1.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; // 去掉控件外边框 dgv1.BorderStyle = BorderStyle.None;
第二步:用自定义绘制实现粗黑色行分隔线
因为DividerHeight的空白区域颜色继承自控件背景色,没法直接改成黑色,所以我们用行绘制事件来手动画粗黑线:
1. 先隐藏默认的灰色分隔线
把GridColor设为和控件背景色一致,让默认的细线消失:
dgv1.GridColor = dgv1.BackColor;
2. 添加行绘制事件
在窗体的构造函数或者Load事件里绑定RowPostPaint事件:
dgv1.RowPostPaint += Dgv1_RowPostPaint;
3. 实现事件处理方法
这个方法会在每一行绘制完成后,在指定行的底部画一条2像素宽的黑色线条(你可以根据需求调整粗细和画线条件):
private void Dgv1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { // 跳过最后一行(如果不需要在表格最底部画线的话) if (e.RowIndex == dgv1.Rows.Count - 1) return; // 只在偶数行(对应你原来代码里的j为偶数的行)底部画线,不需要的话可以删掉这个判断 if ((e.RowIndex + 1) % 2 == 0) { // 创建2像素宽的黑色画笔 using (Pen blackPen = new Pen(Color.Black, 2)) { // 计算线条位置:行的底部,宽度覆盖控件客户区(避免被滚动条挡住) int lineY = e.RowBounds.Bottom; dgv1.CreateGraphics().DrawLine(blackPen, 0, lineY, dgv1.ClientSize.Width, lineY); } } }
为什么你的原来代码没效果?
你之前用DividerHeight增加的是行之间的空白高度,这个区域的颜色是DataGridView的BackColor,不是GridColor,所以不管怎么调颜色属性都没法把这个空白变成黑色,必须通过自定义绘制来实现带颜色的粗线条。
内容的提问来源于stack exchange,提问作者operamaxi
相关产品推荐
相关产品推荐

