Partilhar 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 de plano de fundo, cor de primeiro plano e fonte. Normalmente, no entanto, várias células compartilharão características de estilo específicas.

Os grupos de células que partilham estilos podem incluir todas as células dentro de linhas ou colunas específicas, todas as células que contêm valores específicos ou todas as células no controlo. Como esses grupos se sobrepõem, cada célula pode obter suas informações de estilo de mais de um lugar. Por exemplo, pode-se querer que todas as células num controlo DataGridView usem a mesma fonte, mas apenas as células em colunas monetárias utilizem o formato de moeda, e apenas as células monetárias com números negativos usem uma cor de primeiro plano vermelha.

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 Consulte também abaixo.

Usando objetos DataGridViewCellStyle

Você pode recuperar objetos DataGridViewCellStyle de várias propriedades das classes DataGridView, DataGridViewColumn, DataGridViewRowe DataGridViewCell e suas classes derivadas. Se uma dessas propriedades ainda não tiver sido definida, recuperar 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 duplicação desnecessária 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 filtram cada nível até o nível da célula, você também pode evitar a duplicação de estilo definindo apenas as 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 DataGridViewCellStyle objetos.

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 células de cabeçalho.
AlternatingRowsDefaultCellStyle DataGridView Obtém ou define estilos de célula padrão usados alternando linhas no controle. Usado para criar um efeito semelhante ao 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, incluindo estilos herdados de níveis superiores.

Como mencionado acima, obter o valor de uma propriedade style automaticamente instancia um novo objeto DataGridViewCellStyle se a propriedade não tiver sido definida anteriormente. Para evitar criar esses 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 correspondente PropertyNameChanged no controlo 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 style correspondente é definida como um objeto DataGridViewCellStyle diferente. Estes eventos não ocorrem quando se recupera um objeto DataGridViewCellStyle a partir de uma propriedade de estilo e se modificam os seus valores de propriedade. Para responder a alterações nos objetos de estilo de célula em si, manipule o evento CellStyleContentChanged.

Herança de estilo

Cada DataGridViewCell recebe sua aparência de sua 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 sem cabeçalho obtém seus valores.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (apenas 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 determinada.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle ou DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

O diagrama a seguir ilustra esse processo.

Propriedades do tipo DataGridViewCellStyle

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

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

A propriedade row InheritedStyle assume os seus valores das seguintes propriedades.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (apenas 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 do valor ForeColor para o 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. Torna-se o valor da propriedade ForeColor da célula InheritedStyle.

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

herança de valor de propriedade DataGridView

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

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 retornado pela propriedade DefaultCellStyle. Se desejar que as propriedades definidas para o objeto retornado pela propriedade DefaultCellStyle se apliquem aos cabeçalhos de linha e coluna, você deverá definir 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 os TopLeftHeaderCell) serão automaticamente estilizados pelo tema atual, substituindo quaisquer 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. Este objeto contém propriedades que permitem determinar o valor da célula que está sendo formatada junto com sua localização no controle DataGridView. Este objeto também contém uma propriedade CellStyle que é inicializada com o valor da propriedade InheritedStyle da célula formatada. Você pode modificar as propriedades de estilo de célula para especificar informações de estilo apropriadas ao valor e ao local da célula.

Observação

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

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 de plano de fundo da célula (recuperado por meio da propriedade Style da célula) e, em seguida, defini-lo como uma nova cor que destacará a célula quando o mouse passar sobre ela. Em um manipulador para o evento CellMouseLeave, você pode restaurar a cor do plano de fundo para o valor original.

Observação

O armazenamento em cache dos valores armazenados na propriedade Style da célula é importante, independentemente de um determinado valor de estilo estar definido. Se você substituir temporariamente uma configuração de estilo, restaurá-la ao seu estado original "não definido" garante que a célula voltará 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.

Ver também