Compartilhar via


Estilos de célula no controle DataGridView do Windows Forms

Cada célula dentro do controle DataGridView pode ter seu próprio estilo, como formato de texto, cor do plano de fundo, cor do primeiro plano e fonte. Normalmente, no entanto, várias células compartilharão características de estilo específicas.

Grupos de células que compartilham estilos podem incluir todas as células em linhas ou colunas específicas, todas as células que contêm valores específicos ou todas as células no controle. Como esses grupos se sobrepõem, cada célula pode obter suas informações de estilo de mais de um lugar. Por exemplo, talvez você queira que cada célula em um controle DataGridView use a mesma fonte, mas apenas células em colunas de moeda usem o formato de moeda, e somente células de moeda com números negativos usem uma cor de primeiro plano vermelha.

A classe DataGridViewCellStyle

A classe DataGridViewCellStyle contém as seguintes propriedades relacionadas ao estilo visual:

Essa classe também contém as seguintes propriedades relacionadas à formatação:

Para obter mais informações sobre essas propriedades e outras propriedades de estilo de célula, consulte a documentação de referência do DataGridViewCellStyle e os tópicos listados na seção Veja Também abaixo.

Usando objetos DataGridViewCellStyle

Você pode recuperar DataGridViewCellStyle objetos de diversas propriedades das classes DataGridView, DataGridViewColumn, DataGridViewRow e DataGridViewCell e das respectivas classes derivadas. Se uma dessas propriedades ainda não tiver sido definida, a recuperação de seu valor criará um novo objeto DataGridViewCellStyle. Você também pode instanciar seus próprios objetos DataGridViewCellStyle e atribuí-los a essas propriedades.

Você pode evitar a desnecessária duplicação de informações de estilo compartilhando objetos DataGridViewCellStyle entre vários elementos DataGridView. Como os estilos definidos nos níveis de controle, coluna e linha são filtrados por cada nível até o nível da célula, você também pode evitar a duplicação de estilo definindo apenas essas propriedades de estilo em cada nível que diferem dos níveis acima. Isso é descrito com mais detalhes na seção Herança de Estilo a seguir.

A tabela a seguir lista as propriedades primárias que obtêm ou definem objetos DataGridViewCellStyle.

Propriedade Aulas Descrição
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRowe classes derivadas Obtém ou define estilos padrão usados por todas as células em todo o controle (incluindo células de cabeçalho), em uma coluna ou em uma linha.
RowsDefaultCellStyle DataGridView Obtém ou define estilos de célula padrão usados por todas as linhas no controle. Isso não inclui as células de cabeçalho.
AlternatingRowsDefaultCellStyle DataGridView Obtém ou define os estilos de célula padrão, alternando as linhas no controle. Usado para criar um efeito semelhante a livro-razão.
RowHeadersDefaultCellStyle DataGridView Obtém ou define estilos de célula padrão usados pelos cabeçalhos de linha do controle. Substituído pelo tema atual se os estilos visuais estiverem habilitados.
ColumnHeadersDefaultCellStyle DataGridView Obtém ou define estilos de célula padrão usados pelos cabeçalhos de coluna do controle. Substituído pelo tema atual se os estilos visuais estiverem habilitados.
Style DataGridViewCell e classes derivadas Obtém ou define estilos especificados no nível da célula. Esses estilos substituem aqueles herdados de níveis mais altos.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumne classes derivadas Obtém todos os estilos atualmente aplicados à célula, linha ou coluna, inclusive estilos herdados de níveis superiores.

Conforme mencionado acima, obter o valor de uma propriedade de estilo instanciará automaticamente um novo objeto DataGridViewCellStyle se a propriedade não tiver sido definida anteriormente. Para evitar a criação desses objetos desnecessariamente, as classes de linha e coluna têm uma propriedade HasDefaultCellStyle que você pode verificar para determinar se a propriedade DefaultCellStyle foi definida. Da mesma forma, as classes de célula têm uma propriedade HasStyle que indica se a propriedade Style foi definida.

Cada uma das propriedades de estilo tem um evento PropertyNameChanged correspondente no controle DataGridView. Para propriedades de linha, coluna e célula, o nome do evento começa com "Row", "Column", ou "Cell" (por exemplo, RowDefaultCellStyleChanged). Cada um desses eventos ocorre quando a propriedade de estilo correspondente é definida como um objeto de DataGridViewCellStyle diferente. Esses eventos não ocorrem quando você recupera um objeto DataGridViewCellStyle de uma propriedade de estilo e modifica seus valores de propriedade. Para responder às alterações nos objetos de estilo de célula propriamente ditos, manipule o evento CellStyleContentChanged.

Herança de estilo

Cada DataGridViewCell obtém a aparência dele da respectiva propriedade InheritedStyle. O objeto DataGridViewCellStyle retornado por essa propriedade herda seus valores de uma hierarquia de propriedades do tipo DataGridViewCellStyle. Essas propriedades são listadas abaixo na ordem em que o InheritedStyle para células que não são de cabeçalho obtém seus valores.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (somente para células em linhas com números de índice ímpares)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Para células de cabeçalho de linha e coluna, a propriedade InheritedStyle é preenchida por valores da seguinte lista de propriedades de origem na ordem fornecida.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle ou DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

O diagrama a seguir ilustra esse processo.

Propriedades Propriedades do tipo DataGridViewCellStyle

Você também pode acessar os estilos herdados por colunas e linhas específicas. A propriedade InheritedStyle da coluna herda os valores dela das propriedades a seguir.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

A propriedade de linha InheritedStyle herda os valores dela das propriedades a seguir.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (somente para células em linhas com números de índice ímpares)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Para cada propriedade em um objeto DataGridViewCellStyle retornado por uma propriedade InheritedStyle, o valor da propriedade é obtido do primeiro estilo de célula na lista apropriada que tem a propriedade correspondente definida como um valor diferente dos padrões da classe DataGridViewCellStyle.

A tabela a seguir ilustra como o valor da propriedade ForeColor para uma célula de exemplo é herdado da coluna que a contém.

Propriedade do tipo DataGridViewCellStyle Exemplo ForeColor valor do objeto recuperado
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

Nesse caso, o valor Color.Red da linha da célula é o primeiro valor real na lista. Isso se torna o valor da propriedade ForeColor do InheritedStyle da célula.

O diagrama a seguir ilustra como diferentes propriedades de DataGridViewCellStyle podem herdar seus valores de locais diferentes.

Herança de valor da propriedade DataGridView

Aproveitando a herança de estilo, você pode fornecer estilos apropriados para todo o controle sem precisar especificar as mesmas informações em vários lugares.

Embora as células de cabeçalho participem da herança de estilo, conforme descrito, os objetos retornados pelas propriedades ColumnHeadersDefaultCellStyle e RowHeadersDefaultCellStyle do controle DataGridView têm valores de propriedade iniciais que substituem os valores de propriedade do objeto retornados pela propriedade DefaultCellStyle. Se você quiser que as propriedades definidas para o objeto retornado pela propriedade DefaultCellStyle sejam aplicadas a cabeçalhos de linha e coluna, defina as propriedades correspondentes dos objetos retornados pelas propriedades ColumnHeadersDefaultCellStyle e RowHeadersDefaultCellStyle para os padrões indicados para a classe DataGridViewCellStyle.

Observação

Se os estilos visuais estiverem habilitados, os cabeçalhos de linha e coluna (exceto o TopLeftHeaderCell) serão automaticamente estilizados pelo tema atual, substituindo todos os estilos especificados por essas propriedades.

Os tipos DataGridViewButtonColumn, DataGridViewImageColumne DataGridViewCheckBoxColumn também inicializam alguns valores do objeto retornado pela propriedade da coluna DefaultCellStyle. Para obter mais informações, consulte a documentação de referência para esses tipos.

Definindo estilos dinamicamente

Para personalizar os estilos de células com valores específicos, implemente um manipulador para o evento DataGridView.CellFormatting. Os manipuladores desse evento recebem um argumento do tipo DataGridViewCellFormattingEventArgs. Esse objeto contém propriedades que permitem determinar o valor da célula que está sendo formatada junto com sua localização no controle DataGridView. Esse objeto também contém uma propriedade CellStyle inicializada para o valor da propriedade InheritedStyle da célula que está sendo formatada. Você pode modificar as propriedades de estilo de célula para especificar informações de estilo apropriadas para o valor e o local da célula.

Observação

Os eventos RowPrePaint e RowPostPaint também recebem um objeto DataGridViewCellStyle nos dados do evento, mas, no caso deles, é uma cópia da propriedade de linha InheritedStyle para fins de leitura somente, e as alterações feitas nele não afetam o controle.

Você também pode modificar dinamicamente os estilos de células individuais em resposta a eventos como os eventos DataGridView.CellMouseEnter e CellMouseLeave. Por exemplo, em um manipulador para o evento CellMouseEnter, você pode armazenar o valor atual da cor da tela de fundo da célula (recuperada por meio da propriedade Style da célula) e defini-la como uma nova cor que realçará a célula quando o mouse passar o mouse sobre ela. Em um manipulador para o evento CellMouseLeave, você pode restaurar a cor da tela de fundo para o valor original.

Observação

Armazenar em cache os valores armazenados na propriedade Style da célula é importante, independentemente de um valor de estilo específico ser definido. Se você substituir temporariamente uma configuração de estilo, restaurá-la para o estado original "não definido" garante que a célula volte a herdar a configuração de estilo de um nível mais alto. Se você precisar determinar o estilo real em vigor para uma célula, independentemente de o estilo ser herdado, use a propriedade InheritedStyle da célula.

Consulte também