Как изменить цвет ячейки datagridview

I have the following code : private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { foreach (DataGridViewRow row in dgvStatus.Rows) { row.

I have the following code :

private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dgvStatus.Rows)
    {
        row.Cells[color.Index].Style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    }
}

I am trying to set the background color of each cell from the background color column. this doesn’t work the color never change. Any idea of why?

I’ve been looking around but didn’t found anything usefull

Fabrice T's user avatar

asked Apr 19, 2013 at 13:25

Rémi's user avatar

Simply create a new DataGridViewCellStyle object, set its back color and then assign the cell’s style to it:

    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    style.ForeColor = Color.Black;
    row.Cells[color.Index].Style = style;

answered Apr 19, 2013 at 13:36

Jeb's user avatar

JebJeb

3,6695 gold badges27 silver badges45 bronze badges

1

I finally managed to get it working. Here the code :

private void dgvStatus_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex != color.Index)
        return;

    e.CellStyle.BackColor = Color.FromArgb(int.Parse(((DataRowView)dgvStatus.Rows[e.RowIndex].DataBoundItem).Row[4].ToString()));
}

if anyone know a better to do this please don’t hesitate to post it. I’m open to suggestion

Scott Whitlock's user avatar

answered Apr 19, 2013 at 14:08

Rémi's user avatar

RémiRémi

3,7575 gold badges27 silver badges44 bronze badges

3

If you are still intrested in why this didn’t work for you at first:

The reason you don’t see changes you’ve made to the cell’s style is because you do these changes before the form was shown, and so they are disregarded.

Changing cell styles in the events suggested here will do the job, but they are called multiple times causing your style changes to happen more times than you wish, and so aren’t very efficient.

To solve this, either change the style after the point in your code in which the form is shown, or subscribe to the Shown event, and place your changes there (this is event is called significantly less than the other events suggested).

answered Oct 2, 2013 at 11:54

Ysch's user avatar

YschYsch

7422 gold badges9 silver badges23 bronze badges

4

dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;

CodeChimp's user avatar

CodeChimp

4,7226 gold badges46 silver badges61 bronze badges

answered Feb 17, 2016 at 15:26

Serkan Acuner's user avatar

1

int rowscount = dataGridView1.Rows.Count;         

for (int i = 0; i < rowscount; i++)
{            
    if (!(dataGridView1.Rows[i].Cells[8].Value == null))
    {
        dataGridView1.Rows[i].Cells[8].Style.BackColor = Color.LightGoldenrodYellow;
    }
}

Vadim Martynov's user avatar

answered Mar 8, 2016 at 20:08

Serkan Acuner's user avatar

Similar as shown and mentioned:

Notes: Take into consideration that Cells will change their color (only) after the DataGridView Control is Visible.
Therefore one practical solution would be using the:

VisibleChanged Event

In case you wish to keep your style when creating new Rows; also subscribe the:

RowsAdded Event

Example bellow:

///<summary> Instantiate the DataGridView Control. </summary>
private DataGridView dgView = new DataGridView;

///<summary> Method to configure DataGridView Control. </summary>
private void DataGridView_Configuration()
{
    // In this case the method just contains the VisibleChanged event subscription.

    dgView.VisibleChanged += DgView_VisibleChanged;

    // Uncomment line bellow in case you want to keep the style when creating new rows.
    // dgView.RowsAdded += DgView_RowsAdded;
}

///<summary> The actual Method that will re-design (Paint) DataGridView Cells. </summary>
 private void DataGridView_PaintCells()
 {
     int nrRows = dgView.Rows.Count;
     int nrColumns = dgView.Columns.Count;
     Color green = Color.LimeGreen;

     // Iterate over the total number of Rows
     for (int row = 0; row < nrRows; row++)
     {
         // Iterate over the total number of Columns
         for (int col = 0; col < nrColumns; col++) 
         {
             // Paint cell location (column, row)
             dgView[col, row].Style.BackColor = green;
         }
     }
 }

///<summary> The DataGridView VisibleChanged Event. </summary>
private void DataGridView_VisibleChanged(object sender, EventArgs e)
{
    DataGridView_PaintCells();
}

/// <summary> Occurrs when a new Row is Created. </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{ 
    DataGridView_PaintCells(); 
}

Finally: Just call the DataGridView_Configuration() (method)

i.e: Form Load Event.

answered Jan 23, 2020 at 13:38

try the following (in RowDataBound method of GridView):

protected void GridViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // this will only change the rows backgound not the column header 

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].BackColor = System.Drawing.Color.LightCyan; //first col
        e.Row.Cells[1].BackColor = System.Drawing.Color.Black; // second col
    }
}

Rémi's user avatar

Rémi

3,7575 gold badges27 silver badges44 bronze badges

answered Aug 22, 2013 at 18:45

Awaidus's user avatar

protected void grdDataListeDetay_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[3].Text != "0")
        {
            for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
            {
                e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
            }
        }
    }
}

Mehdi Khademloo's user avatar

answered Sep 29, 2013 at 13:11

ertugrulakdag's user avatar

2

You can use the VisibleChanged event handler.

private void DataGridView1_VisibleChanged(object sender, System.EventArgs e)
{
    var grid = sender as DataGridView;
    grid.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
}

answered Oct 5, 2019 at 15:25

Sнаđошƒаӽ's user avatar

SнаđошƒаӽSнаđошƒаӽ

16.2k12 gold badges74 silver badges88 bronze badges

dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;

answered Aug 20, 2018 at 5:21

sailfish009's user avatar

sailfish009sailfish009

2,4161 gold badge24 silver badges30 bronze badges

3

I have the following code :

private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dgvStatus.Rows)
    {
        row.Cells[color.Index].Style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    }
}

I am trying to set the background color of each cell from the background color column. this doesn’t work the color never change. Any idea of why?

I’ve been looking around but didn’t found anything usefull

Fabrice T's user avatar

asked Apr 19, 2013 at 13:25

Rémi's user avatar

Simply create a new DataGridViewCellStyle object, set its back color and then assign the cell’s style to it:

    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    style.ForeColor = Color.Black;
    row.Cells[color.Index].Style = style;

answered Apr 19, 2013 at 13:36

Jeb's user avatar

JebJeb

3,6695 gold badges27 silver badges45 bronze badges

1

I finally managed to get it working. Here the code :

private void dgvStatus_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex != color.Index)
        return;

    e.CellStyle.BackColor = Color.FromArgb(int.Parse(((DataRowView)dgvStatus.Rows[e.RowIndex].DataBoundItem).Row[4].ToString()));
}

if anyone know a better to do this please don’t hesitate to post it. I’m open to suggestion

Scott Whitlock's user avatar

answered Apr 19, 2013 at 14:08

Rémi's user avatar

RémiRémi

3,7575 gold badges27 silver badges44 bronze badges

3

If you are still intrested in why this didn’t work for you at first:

The reason you don’t see changes you’ve made to the cell’s style is because you do these changes before the form was shown, and so they are disregarded.

Changing cell styles in the events suggested here will do the job, but they are called multiple times causing your style changes to happen more times than you wish, and so aren’t very efficient.

To solve this, either change the style after the point in your code in which the form is shown, or subscribe to the Shown event, and place your changes there (this is event is called significantly less than the other events suggested).

answered Oct 2, 2013 at 11:54

Ysch's user avatar

YschYsch

7422 gold badges9 silver badges23 bronze badges

4

dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;

CodeChimp's user avatar

CodeChimp

4,7226 gold badges46 silver badges61 bronze badges

answered Feb 17, 2016 at 15:26

Serkan Acuner's user avatar

1

int rowscount = dataGridView1.Rows.Count;         

for (int i = 0; i < rowscount; i++)
{            
    if (!(dataGridView1.Rows[i].Cells[8].Value == null))
    {
        dataGridView1.Rows[i].Cells[8].Style.BackColor = Color.LightGoldenrodYellow;
    }
}

Vadim Martynov's user avatar

answered Mar 8, 2016 at 20:08

Serkan Acuner's user avatar

Similar as shown and mentioned:

Notes: Take into consideration that Cells will change their color (only) after the DataGridView Control is Visible.
Therefore one practical solution would be using the:

VisibleChanged Event

In case you wish to keep your style when creating new Rows; also subscribe the:

RowsAdded Event

Example bellow:

///<summary> Instantiate the DataGridView Control. </summary>
private DataGridView dgView = new DataGridView;

///<summary> Method to configure DataGridView Control. </summary>
private void DataGridView_Configuration()
{
    // In this case the method just contains the VisibleChanged event subscription.

    dgView.VisibleChanged += DgView_VisibleChanged;

    // Uncomment line bellow in case you want to keep the style when creating new rows.
    // dgView.RowsAdded += DgView_RowsAdded;
}

///<summary> The actual Method that will re-design (Paint) DataGridView Cells. </summary>
 private void DataGridView_PaintCells()
 {
     int nrRows = dgView.Rows.Count;
     int nrColumns = dgView.Columns.Count;
     Color green = Color.LimeGreen;

     // Iterate over the total number of Rows
     for (int row = 0; row < nrRows; row++)
     {
         // Iterate over the total number of Columns
         for (int col = 0; col < nrColumns; col++) 
         {
             // Paint cell location (column, row)
             dgView[col, row].Style.BackColor = green;
         }
     }
 }

///<summary> The DataGridView VisibleChanged Event. </summary>
private void DataGridView_VisibleChanged(object sender, EventArgs e)
{
    DataGridView_PaintCells();
}

/// <summary> Occurrs when a new Row is Created. </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{ 
    DataGridView_PaintCells(); 
}

Finally: Just call the DataGridView_Configuration() (method)

i.e: Form Load Event.

answered Jan 23, 2020 at 13:38

try the following (in RowDataBound method of GridView):

protected void GridViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // this will only change the rows backgound not the column header 

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].BackColor = System.Drawing.Color.LightCyan; //first col
        e.Row.Cells[1].BackColor = System.Drawing.Color.Black; // second col
    }
}

Rémi's user avatar

Rémi

3,7575 gold badges27 silver badges44 bronze badges

answered Aug 22, 2013 at 18:45

Awaidus's user avatar

protected void grdDataListeDetay_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[3].Text != "0")
        {
            for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
            {
                e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
            }
        }
    }
}

Mehdi Khademloo's user avatar

answered Sep 29, 2013 at 13:11

ertugrulakdag's user avatar

2

You can use the VisibleChanged event handler.

private void DataGridView1_VisibleChanged(object sender, System.EventArgs e)
{
    var grid = sender as DataGridView;
    grid.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
}

answered Oct 5, 2019 at 15:25

Sнаđошƒаӽ's user avatar

SнаđошƒаӽSнаđошƒаӽ

16.2k12 gold badges74 silver badges88 bronze badges

dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;

answered Aug 20, 2018 at 5:21

sailfish009's user avatar

sailfish009sailfish009

2,4161 gold badge24 silver badges30 bronze badges

3

I have the following code :

private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dgvStatus.Rows)
    {
        row.Cells[color.Index].Style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    }
}

I am trying to set the background color of each cell from the background color column. this doesn’t work the color never change. Any idea of why?

I’ve been looking around but didn’t found anything usefull

Fabrice T's user avatar

asked Apr 19, 2013 at 13:25

Rémi's user avatar

Simply create a new DataGridViewCellStyle object, set its back color and then assign the cell’s style to it:

    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    style.ForeColor = Color.Black;
    row.Cells[color.Index].Style = style;

answered Apr 19, 2013 at 13:36

Jeb's user avatar

JebJeb

3,6695 gold badges27 silver badges45 bronze badges

1

I finally managed to get it working. Here the code :

private void dgvStatus_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex != color.Index)
        return;

    e.CellStyle.BackColor = Color.FromArgb(int.Parse(((DataRowView)dgvStatus.Rows[e.RowIndex].DataBoundItem).Row[4].ToString()));
}

if anyone know a better to do this please don’t hesitate to post it. I’m open to suggestion

Scott Whitlock's user avatar

answered Apr 19, 2013 at 14:08

Rémi's user avatar

RémiRémi

3,7575 gold badges27 silver badges44 bronze badges

3

If you are still intrested in why this didn’t work for you at first:

The reason you don’t see changes you’ve made to the cell’s style is because you do these changes before the form was shown, and so they are disregarded.

Changing cell styles in the events suggested here will do the job, but they are called multiple times causing your style changes to happen more times than you wish, and so aren’t very efficient.

To solve this, either change the style after the point in your code in which the form is shown, or subscribe to the Shown event, and place your changes there (this is event is called significantly less than the other events suggested).

answered Oct 2, 2013 at 11:54

Ysch's user avatar

YschYsch

7422 gold badges9 silver badges23 bronze badges

4

dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;

CodeChimp's user avatar

CodeChimp

4,7226 gold badges46 silver badges61 bronze badges

answered Feb 17, 2016 at 15:26

Serkan Acuner's user avatar

1

int rowscount = dataGridView1.Rows.Count;         

for (int i = 0; i < rowscount; i++)
{            
    if (!(dataGridView1.Rows[i].Cells[8].Value == null))
    {
        dataGridView1.Rows[i].Cells[8].Style.BackColor = Color.LightGoldenrodYellow;
    }
}

Vadim Martynov's user avatar

answered Mar 8, 2016 at 20:08

Serkan Acuner's user avatar

Similar as shown and mentioned:

Notes: Take into consideration that Cells will change their color (only) after the DataGridView Control is Visible.
Therefore one practical solution would be using the:

VisibleChanged Event

In case you wish to keep your style when creating new Rows; also subscribe the:

RowsAdded Event

Example bellow:

///<summary> Instantiate the DataGridView Control. </summary>
private DataGridView dgView = new DataGridView;

///<summary> Method to configure DataGridView Control. </summary>
private void DataGridView_Configuration()
{
    // In this case the method just contains the VisibleChanged event subscription.

    dgView.VisibleChanged += DgView_VisibleChanged;

    // Uncomment line bellow in case you want to keep the style when creating new rows.
    // dgView.RowsAdded += DgView_RowsAdded;
}

///<summary> The actual Method that will re-design (Paint) DataGridView Cells. </summary>
 private void DataGridView_PaintCells()
 {
     int nrRows = dgView.Rows.Count;
     int nrColumns = dgView.Columns.Count;
     Color green = Color.LimeGreen;

     // Iterate over the total number of Rows
     for (int row = 0; row < nrRows; row++)
     {
         // Iterate over the total number of Columns
         for (int col = 0; col < nrColumns; col++) 
         {
             // Paint cell location (column, row)
             dgView[col, row].Style.BackColor = green;
         }
     }
 }

///<summary> The DataGridView VisibleChanged Event. </summary>
private void DataGridView_VisibleChanged(object sender, EventArgs e)
{
    DataGridView_PaintCells();
}

/// <summary> Occurrs when a new Row is Created. </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{ 
    DataGridView_PaintCells(); 
}

Finally: Just call the DataGridView_Configuration() (method)

i.e: Form Load Event.

answered Jan 23, 2020 at 13:38

try the following (in RowDataBound method of GridView):

protected void GridViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // this will only change the rows backgound not the column header 

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].BackColor = System.Drawing.Color.LightCyan; //first col
        e.Row.Cells[1].BackColor = System.Drawing.Color.Black; // second col
    }
}

Rémi's user avatar

Rémi

3,7575 gold badges27 silver badges44 bronze badges

answered Aug 22, 2013 at 18:45

Awaidus's user avatar

protected void grdDataListeDetay_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[3].Text != "0")
        {
            for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
            {
                e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
            }
        }
    }
}

Mehdi Khademloo's user avatar

answered Sep 29, 2013 at 13:11

ertugrulakdag's user avatar

2

You can use the VisibleChanged event handler.

private void DataGridView1_VisibleChanged(object sender, System.EventArgs e)
{
    var grid = sender as DataGridView;
    grid.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
}

answered Oct 5, 2019 at 15:25

Sнаđошƒаӽ's user avatar

SнаđошƒаӽSнаđошƒаӽ

16.2k12 gold badges74 silver badges88 bronze badges

dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;

answered Aug 20, 2018 at 5:21

sailfish009's user avatar

sailfish009sailfish009

2,4161 gold badge24 silver badges30 bronze badges

3

1 / 1 / 0

Регистрация: 04.03.2013

Сообщений: 125

1

05.02.2014, 16:06. Показов 18613. Ответов 4


Всем привет!
не могу придумать алгоритм
Имеется таблица «dataGridview»
Столбцы «№», «Участник», «Очки», «Место»
Между столбцами Участник и Очки будут добавляться столбцы 1,2,3,4…. А строки с Именами участников
Нужно закрасить ячейки по диагонали… см. скриншот
Спасибо

Миниатюры

Изменение цвета определенных ячеек в DataGridview
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



82 / 83 / 48

Регистрация: 12.10.2013

Сообщений: 1,079

06.02.2014, 03:23

2

Может алгоритм не обязателен в данном случае? Можно «тупо»расположить в каждой нужной ячейке Label ,заполнить ее,и изменить свойство BackColor на нужный цвет.



0



xBios

1 / 1 / 0

Регистрация: 04.03.2013

Сообщений: 125

06.02.2014, 15:05

 [ТС]

3

А зачем label. Во первых: они и так красятся

C#
1
dataGridView1.Rows[2].Cells[2].Style.BackColor = System.Drawing.Color.Gray;

Во вторых: количество строк и столбцов неизвестно, т.е. добавляем участника, добавляется строка и столбец, нужно отловить номер ячейки которая будет закрашена.



0



xBios

1 / 1 / 0

Регистрация: 04.03.2013

Сообщений: 125

06.02.2014, 15:34

 [ТС]

4

Сейчас пытаюсь закрасить все строку, так в качестве эксперимента.Но не закрашивается ячейка нового столбца. см. скриншот

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            int i = dataGridView1.NewRowIndex; 
            i++;
            dataGridView1.Rows.Add(Convert.ToString(i),listBox1.SelectedItem.ToString(),"0","0");
            dataGridView1.Columns.Add("Number" + Convert.ToString(i), Convert.ToString(i));
            dataGridView1.Columns["Column3"].DisplayIndex = dataGridView1.Columns.Count-1;
            dataGridView1.Columns["Column2"].DisplayIndex = dataGridView1.Columns.Count - 2;
            dataGridView1.AutoResizeColumns(); // Добавление строк и стобцов
            dataGridView1.Refresh();
            int i3 = 2;
            int i2 = 0;
            for (i2 = 0; i2 < dataGridView1.Columns.Count-1; i2++ )
                dataGridView1.Rows[0].Cells[i2].Style.BackColor = System.Drawing.Color.Gray;

С этим вопросом разобрался в условии цикла убрал -1 (стыдно)

Миниатюры

Изменение цвета определенных ячеек в DataGridview
 



0



xBios

1 / 1 / 0

Регистрация: 04.03.2013

Сообщений: 125

06.02.2014, 16:55

 [ТС]

5

Все оказалось очень просто и банально, При программном создании столбца я присваиваю ему имя(т.е. в каком столбце закрашивать мы уже знаем) при добавлении строк почти тоже самое. выкладываю полный код добавления Строк и столбцов с закрашиванием диагонали

C#
1
2
3
4
5
6
7
8
9
10
        {
            int i = dataGridView1.NewRowIndex; // Добавление строк и столбцов
            i++;
            dataGridView1.Rows.Add(Convert.ToString(i),listBox1.SelectedItem.ToString(),"0","0");// Добавляем строку с именем из ListBox
            dataGridView1.Columns.Add("Number" + Convert.ToString(i), Convert.ToString(i)); // Добавляем Стобец
            dataGridView1.Columns["Column3"].DisplayIndex = dataGridView1.Columns.Count-1; //Сортировка колонок(Ставим последними)
            dataGridView1.Columns["Column2"].DisplayIndex = dataGridView1.Columns.Count - 2;//Сортировка колонок(Ставим последними)
            dataGridView1.AutoResizeColumns(); // Добавление строк и стобцов
            dataGridView1.Rows[i -1].Cells[("Number") + Convert.ToString(i)].Style.BackColor = System.Drawing.Color.Gray;   // Красим
        }



0



Важность цветового оформления

Цвета строк, ячеек и столбцов DataGridView

Немаловажную роль для комфорта работы с приложением играет цветовая гамма таблиц, отображаемых элементом управления DataGridView. Приятные цвета способствуют повышению производительности труда. Темные темы для DataGridView снижают нагрузку на зрение при длительной работе с приложением управления баз данных. Создавая программы необходимо учитывать индивидуальные цветовые предпочтения разных пользователей.

Цвета необходимы также для акцентирования внимания на редактируемой части таблицы. В процессе работы с визуализированными таблицами базы данных может потребоваться выделение отдельным цветом любого компонента DataGridView: строки, столбца, ячейки и других составляющих. Исходник приложения содержит один из способов создания цветовой гаммы таблиц данных, с возможностями выделения любой строки, столбца или ячейки. Пример построен на программе управления базой данных с помощью DataGridView.

Цветовые компоненты DataGridView

Элемент визуального отображения таблиц в своем составе содержит внушительный список стилей-компонентов, каждый из которых может хранить информацию о своём цвете. Все стили относятся к классу DataGridViewCellStyle.

Стили и свойства DataGridView, описываются только цветовые качества:

  • DataGridView.BackgroundColor — цвет фона элемента, когда высота таблицы с данными меньше высоты самого элемента DataGridView.
  • DataGridView.ForeColor — цвет шрифта ячеек таблицы
  • DataGridView.GridColor — цвет линий таблицы
  • DataGridView.DefaultCellStyle — цвет и другие настройки вида ячеек таблицы. Самый «слабый» стиль, настройки стилей строк, столбцов и ячеек переопределяют данное свойство.
  • DataGridView.RowsDefaultCellStyle — цвет строк, переопределяет значения DataGridView.DefaultCellStyle.
  • DataGridView.AlternatingRowsDefaultCellStyle — цвет нечетных строк таблицы. Переопределяет все стили, кроме DataGridViewRow.DefaultCellStyle и DataGridViewCell.Style
  • DataGridViewColumn.DefaultCellStyle — цвет ячеек столбца. Переопределяется всеми стилями, кроме DataGridView.DefaultCellStyle.
  • DataGridViewRow.DefaultCellStyle — цвет строки, хранит свои настройки независимо от родительского DataGridView. Переопределяет все стили, кроме DataGridViewCell.Style.
  • DataGridViewCell.Style — цвет ячейки, переопределяет все стили.
  • DataGridView.ColumnHeadersDefaultCellStyle — цвет заголовков столбцов, при DataGridView.EnableHeadersVisualStyles = false.
  • DataGridView.RowHeadersDefaultCellStyle — цвет заголовков строк, при DataGridView.EnableHeadersVisualStyles = false.

Цвета заголовков столбцов и строк

Заголовки строк и столбцов обычно выделяются более темным цветом, чем ячейки. Если свойство DataGridView.EnableHeadersVisualStyles=true — для заголовков используются цвета текущей темы операционной системы. Чтобы раскрасить заголовки таблицы элемента DataGridView в собственные цвета, необходимо отключить визуальные стили: DataGridView.EnableHeadersVisualStyles=false.

Для примера показан код метода зелёной темы:

public void GreenStyle()
{
    // Предварительный сброс цветов предыдущей темы.
    ResetColors();
    ResetFormColor();

    // === Настройка стиля  формы ===

    _menustrip.BackColor = Color.FromArgb(152, 230, 152);
    _menustrip.ForeColor = Color.Black;

    _form.BackColor = Color.FromArgb(30, 123, 30);
    _form.ForeColor = Color.White;

    foreach (GroupBox grp in _gbxs)
    {
        grp.ForeColor = Color.White;
    }

    // === Настройка стиля  таблиц элементов DataGridView ===    

    foreach (DataGridView dgv in _dgvs)
    {
        // Цветовая гамма для выделения ячеек.
        dgv.DefaultCellStyle.SelectionBackColor = Color.FromArgb(0, 128, 255);
        dgv.DefaultCellStyle.SelectionForeColor = Color.White;

        // Цвета ячеек по умолчанию.
        dgv.DefaultCellStyle.BackColor = Color.White;
        dgv.DefaultCellStyle.ForeColor = Color.Black;

        // Цвета нечетных строк.
        dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(174, 239, 174);
        dgv.AlternatingRowsDefaultCellStyle.ForeColor = Color.Black;

        // Окраска в одинаковый цвет заголовок столбцов и строк.
        dgv.ColumnHeadersDefaultCellStyle.BackColor =
            dgv.RowHeadersDefaultCellStyle.BackColor = Color.FromArgb(20, 82, 20);
        dgv.ColumnHeadersDefaultCellStyle.ForeColor =
            dgv.RowHeadersDefaultCellStyle.ForeColor = Color.White;

        // Фоновый цвет самого DataGridView
        dgv.BackgroundColor = Color.FromArgb(10, 41, 10);
        // Временно сбрасываем выделения всех ячеек.
        dgv.ClearSelection(); 
    }
}

Чередование цветов строк

Облегчает восприятие данных в таблицах методика чередования цветов строк. Данный способ существенно повышает концентрацию внимания глаз на выбранной строке. В элементе отображения таблиц DataGridView Windows Forms уже заложена возможность автоматического окрашивания нечетных строк. Для этого достаточно только определить свойство альтернативного стиля — AlternatingRowsDefaultCellStyle, остальное берёт на себя внутренняя логика элемента отображения таблиц.

Определение альтернативного цвета нечетных строк неэффективно при установленных стилях строк DataGridViewRow.DefaultCellStyle или ячеек DataGridViewCell.Style. Применение чередование цветов строк показано анимационной картинкой интерфейса приложения.

Определение сочетания цвета фона и шрифта для нечетных строк таблицы:

// Цвета нечетных строк.
dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(174, 239, 174);
dgv.AlternatingRowsDefaultCellStyle.ForeColor = Color.Black;

Выделение столбца цветом

Для выделения выбранного столбца одним цветом используется экземпляр класса DataGridViewColumn входящий в состав коллекции столбцов DataGridView.Columns. При назначении стиля столбцов необходимо учитывать, что DataGridViewRow.DefaultCellStyle не может переопределить стили AlternatingRowsDefaultCellStyle, DataGridViewRow.DefaultCellStyle, DataGridViewCell.Style. Посмотреть окрашенные столбцы можно в анимации цветовых стилей приложения вначале страницы.

Метод окрашивания в разные цвета всех столбцов таблицы:

public void ColumnStyle()
{
    // Предварительный сброс цветов.
    ResetColors();

    // Гамма цветов для столбцов.
    Color[] colors = { Color.LightCoral, Color.LightGreen,
        Color.LightBlue, Color.Yellow, Color.Orange, Color.Aqua };
    foreach (DataGridView dgv in _dgvs)
    {
        int count = 0;
        foreach (DataGridViewColumn column in dgv.Columns)
        {
            // Каждый столбец окрашивается в свой цвет.
            column.DefaultCellStyle.BackColor = colors[count];
            count++;
        }
        // Сброс выделения для рассматривания цветов.
        dgv.ClearSelection();
    }
}

Цветные строки DataGridView

Строки окрашиваются подобно столбцам: коллекция DataGridView.Rows содержит ссылки на все строки отображаемой таблицы в виде экземпляров класса DataGridViewRow. Каждый экземпляр имеет собственный стиль DefaultCellStyle, благодаря этому можно окрасить фон любой строки в индивидуальный цвет.

Метод создания разноцветных строк:

public void RowStyle()
{
    // Сброс цветовых настроек к по умолчанию.
    ResetColors();

    Color[] colors = { Color.LightCoral, Color.LightGreen,
        Color.LightBlue, Color.Yellow, Color.Orange, Color.Aqua };
    foreach (DataGridView dgv in _dgvs)
    {
        // Счётчик цветов.
        int count = 0;
        foreach (DataGridViewRow row in dgv.Rows)
        {
            // Каждая строка в свой цвет.
            row.DefaultCellStyle.BackColor = colors[count];
            _ = count < 5 ? count++ : count = 0;
        }
        dgv.ClearSelection();
    }
}

Назначение цвета ячейке таблицы

Ячейками элемента управления DataGridView владеют строки коллекции DataGridView.Rows. В свою очередь отдельная строка имеет коллекцию ячеек DataGridViewRow.Cells. Отдельную ячейку представляет класс DataGridViewCell, имеющий в своём составе свойство Style типа DataGridViewCellStyle.

DataGridViewCell.Style — самый «сильный» стиль и переопределяет все стили-компоненты в составе DataGridView. Если ячейке назначить цвет, то перекрасить его не сможет ни один стиль.

Метод закраски ячеек разными цветами в шахматном порядке. Результат наглядно показывает анимация цветовых стилей выше.

public void CellStyle()
{
    ResetColors();

    Color[] colors = { Color.LightCoral, Color.LightGreen,
        Color.LightBlue, Color.Yellow, Color.Orange, Color.Aqua };
    foreach (DataGridView dgv in _dgvs)
    {
        foreach (DataGridViewRow row in dgv.Rows)
        {
            int count = 0;
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.Style.BackColor = colors[count];
                _ = count < colors.Length - 1 ? count++ : count = 0;
            }
            Array.Reverse(colors);
        }

        dgv.ClearSelection();
    }
}

Сброс всех стилей к по умолчанию

Стили DataGridView имеют разные веса и могут переопределять другие назначенные стили. Например, определение DataGridViewCell.Style скрывает настройки всех других стилей. При создании приложения с настройками различных цветовых тем необходимо предусмотреть создание метода сброса всех стилей перед назначением нового.

Сброс стилей можно осуществить несколькими способами, в приложении созданы 3 метода сброса стилей. Два из них сбрасывают цветовые настройки теме операционной системы, третий метод необходим для возвращения к собственному стилю.

Первый способ предусматривает обнуление стилей, например: column.DefaultCellStyle = null. В таком случае в объекте DataGridView заново пересоздаются стили для текущей темы операционной системы. Сбрасываются все параметры: цвет фона, настройки шрифта и другие. Данный способ наиболее эффективный и правильный для восстановления вида элементов datGridView к настройке по умолчанию. Данный способ работает в приложении при значении глобальной Global.DefaultFormColors = 0.

Второй способ предполагает создание новых объектов стилей без настроек и присвоение их соответствующим стилям. Настройки по умолчанию новых объектов стилей могут отличаться от настроек элементов, которые были созданы при запуске приложения. Некоторый эффект несовпадения стилей новых объектов и тех которые создались при запуске приложения можно увидеть при нажатии кнопки меню default, выбрав значение глобальной переменной Global.DefaultFormColors = 1.

Сброс установленных стилей к теме по умолчанию установленной операционной системой:

// Первый способ
private void DefaultStyle0()
{
    ResetFormColor();

    foreach (DataGridView dgv in _dgvs)
    {
        DataGridView dataGridView = new();
        // Не может быть null
        dgv.BackgroundColor = dataGridView.BackgroundColor;

        // Обнуление стилей, после этого 
        // они пересоздаются автоматически.
        dgv.DefaultCellStyle = null;
        dgv.AlternatingRowsDefaultCellStyle = null;
        dgv.ColumnHeadersDefaultCellStyle = null;
        dgv.RowHeadersDefaultCellStyle = null;
        // Обнуление стилей строк, столбцов и ячеек.
        foreach (DataGridViewRow row in dgv.Rows)
        {
            row.DefaultCellStyle = null;
            foreach (DataGridViewColumn column in dgv.Columns)
            {
                column.DefaultCellStyle = null;
            }

            foreach(DataGridViewCell cell in row.Cells)
            {
                cell.Style = null;
            }
        }
    }
}

// Второй способ
private void DefaultStyle1()
{
    ResetFormColor();


    foreach (DataGridView dgv in _dgvs)
    {
        DataGridView dataGridView = new();
        dgv.DefaultCellStyle = dataGridView.DefaultCellStyle;
        dgv.AlternatingRowsDefaultCellStyle = dataGridView.AlternatingRowsDefaultCellStyle;
        dgv.ColumnHeadersDefaultCellStyle = dataGridView.ColumnHeadersDefaultCellStyle;
        dgv.RowHeadersDefaultCellStyle = dataGridView.RowHeadersDefaultCellStyle;
        dgv.BackgroundColor = dataGridView.BackgroundColor;

        foreach (DataGridViewRow row in dgv.Rows)
        {
            row.DefaultCellStyle = new();

            foreach (DataGridViewColumn column in dgv.Columns)
            {
                column.DefaultCellStyle = new();
            }

            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.Style = new();
            }
        }
    }
}

Сброс стиля к установленным цветам

Если приложение имело собственные цветовые настройки, то первые два способа (см. выше) не дадут ожидаемого результата. Возврат элементов Windows Form к заводским настройкам отменит установленную для приложения цветовую схему. В таком случае имеется только один выход: после установки выбранной темы приложения сохранить настройки в оперативной памяти или файле. А при вызове метода сброса восстановить сохранённую собственную цветовую схему по умолчанию.

В приложении данный способ активируется значением глобальной переменной выбора способа сброса Global.DefaultFormColors = 2. Этот способ требует глубокое копирование параметров установленного стиля для элементов DataGridView.

Программный код метода глубокого копирования установленных параметров стилей и метода восстановления собственных цветовых настроек приложения:

// Группа сохранения заказных цветов по умолчанию.
private static readonly List _defStyles = new();
private static readonly List _defAltStyles = new();
private static readonly List _defColumnStyles = new();
private static readonly List _defRowStyles = new();
private static readonly List _defDvgBackgroundColors = new();
private static bool _init = false;

// Конструктор набора стилей.
public ColorSet(List dgvs, List gbxs, Form form, MenuStrip menustrip)
{
    _dgvs = dgvs;
    _gbxs = gbxs;
    _form = form;
    _menustrip = menustrip;

    // Однократная инициализация статических членов.
    // Сохранение настроек заказных цветов в оперативной памяти.
    if (_init == false)
    {
        // Глубокое копирование свойств стилей.
        for (int i = 0; i < _dgvs.Count; i++)
        {
            _defDvgBackgroundColors.Add(new Color());
            _defDvgBackgroundColors[i] = _dgvs[i].BackColor;

            _defStyles.Add(new DataGridViewCellStyle());
            _defStyles[i].BackColor = _dgvs[i].DefaultCellStyle.BackColor;
            _defStyles[i].ForeColor = _dgvs[i].DefaultCellStyle.ForeColor;

            _defAltStyles.Add(new DataGridViewCellStyle());
            _defAltStyles[i].BackColor = 
                _dgvs[i].AlternatingRowsDefaultCellStyle.BackColor;
            _defAltStyles[i].ForeColor = 
                _dgvs[i].AlternatingRowsDefaultCellStyle.ForeColor;

            _defColumnStyles.Add(new DataGridViewCellStyle());
            _defColumnStyles[i].BackColor = 
                _dgvs[i].ColumnHeadersDefaultCellStyle.BackColor;
            _defColumnStyles[i].ForeColor = 
                _dgvs[i].ColumnHeadersDefaultCellStyle.ForeColor;

            _defRowStyles.Add(new DataGridViewCellStyle());
            _defRowStyles[i].BackColor = 
                _dgvs[i].ColumnHeadersDefaultCellStyle.BackColor;
            _defRowStyles[i].ForeColor = 
                _dgvs[i].ColumnHeadersDefaultCellStyle.ForeColor;
        }

        _init = true;
    }
}

. . . . . . . . . .

private void DefaultStyle2()
{
    ResetFormColor();

    for (int i = 0; i < _dgvs.Count; i++)
    {
        foreach (DataGridViewRow row in _dgvs[i].Rows)
        {
            row.DefaultCellStyle = null;
            foreach (DataGridViewColumn column in _dgvs[i].Columns)
            {
                column.DefaultCellStyle = null;
            }

            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.Style = null;
            }
        }

        _dgvs[i].BackgroundColor = _defDvgBackgroundColors[i];

        _dgvs[i].DefaultCellStyle.BackColor = _defStyles[i].BackColor;
        _dgvs[i].DefaultCellStyle.ForeColor = _defStyles[i].ForeColor;

        _dgvs[i].AlternatingRowsDefaultCellStyle.BackColor = _defAltStyles[i].BackColor;
        _dgvs[i].AlternatingRowsDefaultCellStyle.ForeColor = _defAltStyles[i].ForeColor;

        _dgvs[i].ColumnHeadersDefaultCellStyle.BackColor = _defColumnStyles[i].BackColor;
        _dgvs[i].ColumnHeadersDefaultCellStyle.ForeColor = _defColumnStyles[i].ForeColor;

        _dgvs[i].RowHeadersDefaultCellStyle.BackColor = _defRowStyles[i].BackColor;
        _dgvs[i].RowHeadersDefaultCellStyle.ForeColor = _defRowStyles[i].ForeColor;
    }
}

Практический пример цветовых схем DataGridView

Приложение написано на языке C#, среда программирования MS Visual Studio 2022, платформа .NET 6. Программный код приложения построен на примере приложения управления базой данных.

Скачать исходник

  • DataGridViewColorCells-vs17.zip
  • Размер: 3221 Кбайт
  • Загрузки: 100

Стили ячеек элемента управления DataGridView в Windows Forms Каждая ячейка в DataGridView элемент управления может иметь свой собственный стиль, включая формат текста, цвет фона, цвет и шрифт. Как правило, тем не менее, несколько ячеек обладают одинаковым стилем.

Группы ячеек с одинаковым стилем могут включать все ячейки в пределах определенного строк или столбцов, все ячейки с определенными значениями или все ячейки в элементе управления. Поскольку эти группы перекрываются, каждая ячейка может получать данные своего стиля из более чем в одном месте. Например, может потребоваться каждая ячейка DataGridView использовать одинаковый шрифт, но только в столбцах для использования формат денежной единицы и только валюты ячейки с отрицательные числа красным основной цвет элемента управления.

Класс DataGridViewCellStyle

DataGridViewCellStyle Класс содержит следующие свойства, относящиеся к стилю:

  • BackColor и ForeColor .
  • SelectionBackColor и SelectionForeColor .
  • Font

Этот класс также содержит следующие свойства, связанные с форматированием:

  • Format и FormatProvider .
  • NullValue и DataSourceNullValue .
  • WrapMode
  • Alignment
  • Padding

Дополнительные сведения об этих свойствах и другие свойства стиля ячейки см. в разделе DataGridViewCellStyle справочной документации и в разделах, перечисленных в подразделе ниже.

С помощью объектов DataGridViewCellStyle

Вы можете получить DataGridViewCellStyle объекты из различных свойств DataGridView , DataGridViewColumn , DataGridViewRow , и DataGridViewCell и их производные классы. Если одно из этих свойств еще не было задано, его значение было получено будет создана новая DataGridViewCellStyle объекта. Можно также создать свои собственные DataGridViewCellStyle объектов и назначьте их этих свойств.

Можно избежать ненужного дублирования информации о стилях, предоставив DataGridViewCellStyle объектов между несколькими DataGridView элементов. Поскольку стили элемента управления, столбца и фильтра строк уровней вниз до каждого уровня на уровне ячейки, можно также избежать дублирования стилей, задав только те свойства стилей на каждом уровне, которые отличаются от более высоких уровнях. Это описывается более подробно в следующем разделе наследования стиля.

В следующей таблице перечислены основные свойства, получить или задать DataGridViewCellStyle объектов.

Свойство.

Классы

Описание:

DefaultCellStyle

DataGridView , DataGridViewColumn , DataGridViewRow и производные классы

Возвращает или задает стили по умолчанию, используемые во все ячейки в весь элемент управления (включая заголовки), в столбце или в строке.

RowsDefaultCellStyle

DataGridView

Возвращает или задает стили ячеек по умолчанию, используемые во всех строках в элементе управления. Это относится к ячейкам заголовков.

AlternatingRowsDefaultCellStyle

DataGridView

Возвращает или задает стили ячеек по умолчанию, используемые во чередующихся строк в элементе управления. Используется для создания эффекта бухгалтерской книги.

RowHeadersDefaultCellStyle

DataGridView

Возвращает или задает стили ячеек по умолчанию, используемые в заголовках строк элемента управления. Текущую тему переопределены, если визуальные стили включены.

ColumnHeadersDefaultCellStyle

DataGridView

Возвращает или задает стили ячеек по умолчанию, используемые в заголовках столбцов элемента управления. Текущую тему переопределены, если визуальные стили включены.

Style

DataGridViewCell и производные классы

Возвращает или задает стили, заданные на уровне ячеек. Эти стили заменяют унаследованные от более высоких уровнях.

InheritedStyle

DataGridViewCell , DataGridViewRow , DataGridViewColumn и производные классы

Получает все стили, примененные в ячейку, строку или столбец, включая стили, унаследованные от более высокого уровня.

Как упоминалось выше, при получении значения свойства стиля автоматически создает новый DataGridViewCellStyle объекта, если свойство не было задано ранее. Во избежание без необходимости создания этих объектов, строк и столбцов классы имеют HasDefaultCellStyle свойство, которое можно проверить, чтобы определить, является ли DefaultCellStyle свойства. Аналогично, классы ячейки имеют HasStyle свойство, которое указывает ли Style свойства.

Каждое из свойств стиля имеет соответствующий PropertyName Changed события DataGridView элемента управления. Для строк, столбцов и свойства ячейки, имя события начинается с «Row«,»Column», или «Cell» (например, RowDefaultCellStyleChanged ). Каждое из этих событий возникает, когда соответствующее свойство стиля с другим DataGridViewCellStyle объекта. Эти события не происходят при извлечении DataGridViewCellStyle объекта из свойства стиля и изменении значений его свойств. Чтобы реагировать на изменения в самих объектов стиля ячейки, обрабатывать CellStyleContentChanged событий.

Наследование стилей

Каждый DataGridViewCell получает его внешний вид из его InheritedStyle свойство. DataGridViewCellStyle Объект, возвращаемый этим свойством наследует значения от иерархии свойств типа DataGridViewCellStyle . Эти свойства перечислены ниже в порядке, в котором InheritedStyle для ячеек не заголовков получает свои значения.

  1. DataGridViewCell.Style
  2. DataGridViewRow.DefaultCellStyle
  3. DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках нечетных)
  4. DataGridView.RowsDefaultCellStyle
  5. DataGridViewColumn.DefaultCellStyle
  6. DataGridView.DefaultCellStyle

Для ячеек заголовков строк и столбцов InheritedStyle свойство заполняется значениями из следующего списка исходных свойств в определенном порядке.

  1. DataGridViewCell.Style
  2. DataGridView.ColumnHeadersDefaultCellStyle или DataGridView.RowHeadersDefaultCellStyle
  3. DataGridView.DefaultCellStyle

Этот процесс показан на следующей схеме.

Также можно получить доступ к стилям, унаследованным от определенных строк и столбцов. Столбец InheritedStyle свойство наследует значения от следующих свойств.

  1. DataGridViewColumn.DefaultCellStyle
  2. DataGridView.DefaultCellStyle

Строка InheritedStyle свойство наследует значения от следующих свойств.

  1. DataGridViewRow.DefaultCellStyle
  2. DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках нечетных)
  3. DataGridView.RowsDefaultCellStyle
  4. DataGridView.DefaultCellStyle

Для каждого свойства в DataGridViewCellStyle объект, возвращаемый InheritedStyle свойства, значение свойства извлекается из первого стиля ячейки в соответствующем списке, соответствующий свойству присвоено значение, отличное от DataGridViewCellStyle класса значения по умолчанию.

В следующей таблице показано, как ForeColor наследуется от столбца, в котором значение свойства ячейка.

Свойство типаDataGridViewCellStyle

Пример ForeColor значение для полученного объекта

DataGridViewCell.Style

Color.Empty

DataGridViewRow.DefaultCellStyle

Color.Red

DataGridView.AlternatingRowsDefaultCellStyle

Color.Empty

DataGridView.RowsDefaultCellStyle

Color.Empty

DataGridViewColumn.DefaultCellStyle

Color.DarkBlue

DataGridView.DefaultCellStyle

Color.Black

В этом случае Color.Red значение из строки ячейки является первым действительным значением в списке. Это становится ForeColor значение свойства ячейки InheritedStyle .

На следующей схеме показана как разные DataGridViewCellStyle свойства могут наследовать значения из разных мест.

Используя преимущества наследования стиля, можно предоставить соответствующие стили для всего элемента управления без указания те же данные в нескольких местах.

Несмотря на то, что ячейки заголовка участвуют в наследовании стиля, как описано, объекты, возвращенные ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle свойства DataGridView управления имеют начальные значения, переопределяющие значения свойств объекта, возвращенного DefaultCellStyle свойство. Если необходимо, чтобы свойства, установленные для объекта, возвращаемого DefaultCellStyle свойства, применяемый к заголовкам строк и столбцов, необходимо задать соответствующие свойства объектов, возвращенных ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle указанного значения по умолчанию для DataGridViewCellStyle класса.

Примечание

Если включены визуальные стили, заголовки строк и столбцов (за исключением TopLeftHeaderCell ) автоматически определяются текущей темы, заменяя все стили, указанные для этих свойств.

DataGridViewButtonColumn , DataGridViewImageColumn , И DataGridViewCheckBoxColumn типы также инициализируют некоторые значения объекта, возвращаемого в столбце DefaultCellStyle свойство. Дополнительные сведения см. в справочной документации для этих типов.

Динамическая установка стилей

Чтобы настроить стили ячеек с определенными значениями, Реализуйте обработчик DataGridView.CellFormatting событий. Обработчики для этого события получают аргумент DataGridViewCellFormattingEventArgs типа. Этот объект содержит свойства, позволяющие определить значение ячейки, подлежащего форматированию вместе с ее расположение в DataGridView элемента управления. Этот объект также содержит CellStyle свойство, которое инициализируется значение InheritedStyle свойства форматируемой ячейки. Можно изменить свойства стиля ячейки и указать сведения о стиле, подходящие для значения ячейки и расположение.

Примечание

RowPrePaint И RowPostPaint событий также получать DataGridViewCellStyle данных объектов событий, но в случае их это копия строки InheritedStyle свойство только для чтения в целях, и изменения не влияют на элементе управления.

Можно также динамически изменять стили отдельных ячеек в ответ на события, такие как DataGridView.CellMouseEnter и CellMouseLeave события. Например, в обработчике CellMouseEnter событий, можно сохранить текущее значение цвета фона ячеек (извлечь с помощью ячейки Style свойства), установите его в новый цвет, который будет выделяться ячейки, при наведении указателя мыши. В обработчике CellMouseLeave события, цвет фона можно будет восстановить исходное значение.

Примечание

Кэширование значений, хранящихся в ячейке Style свойства важно независимо от того, установлен ли значение определенного стиля. Если временно заменить параметр стиля, восстанавливая ее из копии в исходное состояние «не установлено» обеспечивает ячейки будет снова будет наследовать этот параметр стиля с более высокого уровня. Если вам нужно определить текущий стиль, действующий для ячейки независимо от того, наследуется ли стиль, использовать эту ячейку InheritedStyle свойство.

См. также

DataGridView
DataGridViewCellStyle
DataGridView.AlternatingRowsDefaultCellStyle
DataGridView.ColumnHeadersDefaultCellStyle
DataGridView.DefaultCellStyle
DataGridView.RowHeadersDefaultCellStyle
DataGridView.RowsDefaultCellStyle
DataGridViewBand.InheritedStyle
DataGridViewRow.InheritedStyle
DataGridViewColumn.InheritedStyle
DataGridViewBand.DefaultCellStyle
DataGridViewCell.InheritedStyle
DataGridViewCell.Style
DataGridView.CellFormatting
DataGridView.CellStyleContentChanged
DataGridView.RowPrePaint
DataGridView.RowPostPaint
Базовое форматирование и оформление элемента управления DataGridView в Windows Forms
Практическое руководство. Установка стилей ячейки по умолчанию для элемента управления DataGridView в Windows Forms
Форматирование данных в элементе управления DataGridView в Windows Forms

О настройке цвета фона строки и столбца DataGridView — цвета переднего плана

1. Установите стиль всех ячеек DataGridView.
Изменения стиля всех ячеек в DataGridView можно реализовать с помощью свойства DefaultCellStyle объекта DataGridView.

// Цвет фона всех ячеек, содержащих заголовок, желтый
DataGridView1.DefaultCellStyle.BackColor = Color.Yellow;
 
 // Цвет переднего плана всех ячеек, содержащих заголовок, желтый
 DataGridView1.DefaultCellStyle.ForeColor = Color.Yellow; // Настройка цвета переднего плана, требуется только
 Измените BackColor на ForeColor

2. Свойство DataGridView.DefaultCellStyle может изменять стиль всех ячеек, содержащих заголовок, и изменять стиль всех ячеек, кроме заголовка. Вы можете использовать свойство DataGridView.RowsDefaultCellStyle для достижения

// Цвет фона всех ячеек, кроме заголовка, желтый
DataGridView1.RowsDefaultCellStyle.BackColor = Color.Yellow;

3. Измените стиль ячейки.
Свойство DataGridViewCell.Style может изменять стиль отдельной ячейки.
Как и в следующем примере, только цвет фона ячейки (0, 0) установлен на розовый.

// (0, 0) цвет фона ячейки розовый
DataGridView1[0, 0].Style.BackColor = Color.Pink;

4. Измените стиль указанного столбца и ячейки строки.
DataGridViewColumn.DefaultCellStyle, вы можете изменить стиль ячейки столбца. Свойство DataGridViewRow.DefaultCellStyle может изменять стиль ячейки строки.
Как и в приведенном ниже примере, цвет фона ячеек в первом столбце светло-синий, а цвет фона ячеек в первой строке — светло-серый.

// Цвет фона ячейки в столбце индекса 0 голубой
DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Aqua;
 
 // Цвет фона ячейки в строке с индексом 0 светло-серый
DataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;

5. Измените стиль ячеек нечетных строк.
DataGridView.AlternatingRowsDefaultCellStyle, вы можете изменить стиль ячейки нечетных строк DataGridView.
Как и в примере ниже, цвет фона ячеек в нечетных строках установлен на желто-зеленый.

// Цвет фона ячеек в нечетных строках желто-зеленый
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow;

6. Измените стиль ячейки заголовка столбца и заголовка строки.
Стиль ячейки заголовка столбца можно изменить с помощью свойства DataGridView.ColumnHeadersDefaultCellStyle. Чтобы изменить стиль ячейки заголовка строки, можно использовать свойство DataGridView.RowHeadersDefaultCellStyle. Однако, если заголовок — это ячейка слева, вам необходимо установить стиль ячейки для объекта DataGridViewHeaderCell, полученного с помощью свойства DataGridView.TopLeftHeaderCell.
Как и в следующем примере, цвет фона заголовка столбца — слоновая кость, а цвет фона заголовка строки — оранжевый.

// Цвет фона заголовка столбца - слоновая кость
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Ivory;
 
 // Цвет фона заголовка строки оранжевый
DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.Lime;

Дополнение: С помощью этих методов можно получить стиль каждой ячейки заголовка. Как и обычные ячейки, его можно изменить с помощью свойства «Стиль». Короче говоря, это способ персонализировать каждую ячейку. .

О приоритете

Существует порядок приоритета для установки атрибутов стиля ячейки. Порядок от высокого к низкому выглядит следующим образом.
1). DataGridViewCell.Style
2). DataGridViewRow.DefaultCellStyle
3). DataGridView.AlternatingRowsDefaultCellStyle
4). DataGridView.RowsDefaultCellStyle
5). DataGridViewColumn.DefaultCellStyle
6). DataGridView.DefaultCellStyle
Далее следует порядок приоритета атрибута Style ячейки заголовка.
1). DataGridViewCell.Style
2). DataGridView.RowHeadersDefaultCellStyle
3). DataGridView.ColumnHeadersDefaultCellStyle
4). DataGridView.DefaultCellStyle
Сначала задается стиль самой ячейки.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить цвет ячеек таблицы html
  • Как изменить цвет ярлыков на телефоне
  • Как изменить цвет ярлыков на рабочем столе андроид
  • Как изменить цвет ярлыков на рабочем столе айфона
  • Как изменить цвет ярлыка ватсап

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии