如何在datagridview中设置行/列标题单元格的背景颜色 - c#winform

时间:2011-08-20 18:53:07

标签: c# winforms datagridview colors

我想设置datagridview的行标题和列标题交集单元格的背景颜色。我尝试了下面的代码,但它抛出了一个例外,该数字应该是非负数。

DataGridViewCell cell = dgview.Rows[-1].Cells[-1];
cell.Style.BackColor = Color.Red;

我想设置颜色如下图所示

enter image description here

我还提到了下面的文章,但它显示了如何设置整个列标题的颜色。但我的要求是设置单个单元格的颜色 - 行 - 列标题交集单元格。

how-to-change-the-color-of-winform-datagridview-header

非常感谢任何帮助。谢谢。

此致

维奈

3 个答案:

答案 0 :(得分:4)

将当前的ColumnHeadersDefaultCellStyle存储在变量中。

将ColumnHeadersDefaultCellStyle设置为您希望角落的方式。

然后将所有列标题更改为您希望列0到...返回旧样式的方式。

下面是一个名为“MyForm”的表单示例。此示例显示MyForm的默认构造函数。

示例:

    public MyForm()
    {
        InitializeComponent();

        // insert code here to add columns  ...
        // ...
        // ...
        // ...

        DataGridViewCellStyle oldDefault = dgview.ColumnHeadersDefaultCellStyle.Clone();

        dgview.ColumnHeadersDefaultCellStyle.BackColor = Color.Red;

        foreach (DataGridViewColumn item in dgview.Columns)
        {
            item.HeaderCell.Style = oldDefault;
        }
    }

答案 1 :(得分:1)

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex == -1 && e.ColumnIndex ==  -1)

        {
            using (Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor))
            {
                using (Brush backColorBrush = new SolidBrush(Color.Red))
                {
                    using (Pen gridLinePen = new Pen(gridBrush))
                    {
                        // Clear cell 
                        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
                        //Bottom line drawing
                        e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom-1 , e.CellBounds.Right, e.CellBounds.Bottom-1);
                        e.Handled = true;
                    }
                }
            }
        }

答案 2 :(得分:0)

这有点像黑客,但是使用设计器在DataGridView中添加一个PictureBox(如果你正在使用VS)并初始化它的属性,例如:

pictureBox1.BackColor = Color.Red;
pictureBox1.Width = dgView.RowHeadersWidth;
pictureBox1.Height = dgView.ColumnHeadersHeight;