DataGridView的表头单元格背景颜色

3

我希望获取DataGridView的标题单元格的背景颜色,我尝试了一些方法,但是得到的结果为空并且RGB值为0,0,0。

我尝试过以下代码:

 Color cl = dataGridView1.Columns["<Column>"].HeaderCell.Style.BackColor; //<AnyColumn>

我需要重新绘制标题单元格的背景颜色,使其与重新绘制之前的颜色相同,并且要考虑到大小的修改。

请帮忙提供一个解决方案,我已经搜索了很多但没有找到有用的帮助。


看起来你在 GridView 标记中使用了 CssClass。我认为如果你在标记中使用 HeaderCell.Style.BackColor,你就可以得到它。 - Iqbal
我的问题涉及到.net C#、VB.Net WinForms相关,所以我需要解决方案。 - DareDevil
@Iqbal,在Windows表单中,我们没有aspx。 - Arshad
@Arshad 对不起,是我的错误。 - Iqbal
3个回答

4
DataGridView 使用样式继承,因此除非单个标头单元格与默认值不同,否则其 BackColor 将设置为 Color.Empty
请改用 ColumnHeadersDefaultCellStyle.BackColor 属性。
请注意,当 EnableHeadersVisualStyles 设置为 true(默认值),该值将被忽略,并使用视觉样式渲染器绘制标头。

2
经过一些努力,我终于写下了代码,并附带了一些建议。这是通用代码,可以在 C# WinForm 的任何网格的 Paint 方法中调用它,将网格、列名和绘画 Graphics 对象传递给它。
我添加了一个大小为 4 的填充矩形,从前一列的右侧-2开始到下一列的左侧+2结束,这样就隐藏了垂直条。
Public Sub VerticalBarHide(ByVal grd As KryptonExtendedGrid, ByVal colname As String(), ByVal e As System.Drawing.Graphics)
    Dim rectHeader As Rectangle
    grd.EnableHeadersVisualStyles = False
    Dim bgColor As Color
    bgColor = grd.ColumnHeadersDefaultCellStyle.BackColor
    For Each name As String In colname
        rectHeader = grd.GetCellDisplayRectangle(grd.Columns(name).Index, -1, True)
        rectHeader.X = rectHeader.X + rectHeader.Width - 2
        rectHeader.Y += 1
        rectHeader.Width = 2 * 2
        rectHeader.Height -= 2
        e.FillRectangle(New SolidBrush(bgColor), rectHeader)
    Next

End Sub

1
我发现这个方法很有效。你需要设置EnableHeadersVisualStyles=false;。我已经测试过两种方式:
dataGridView1.EnableHeadersVisualStyles = false;

DataGridViewColumn dataGridViewColumn = dataGridView1.Columns["Column1"];
dataGridViewColumn.HeaderCell.Style.BackColor = Color.Magenta;
dataGridViewColumn.HeaderCell.Style.ForeColor = Color.Yellow;

Color cl = dataGridViewColumn.HeaderCell.Style.BackColor;
//or   
Color cl2 = dataGridView1.Columns["Column1"].HeaderCell.Style.BackColor;

没有问题,当我们使用 "dataGridView1.EnableHeadersVisualStyles = false;" 时,但是问题出在那里,它给出的值为0,0,0,0,也就是空的。 - DareDevil
1
@Bradley Smith:所以我在禁用其Visual-Style属性“Color cl = dataGridView1.ColumnHeadersDefaultCellStyle.BackColor;”后使用了此属性,并成功实现了。 - DareDevil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接