You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:42:55