Estilos de Célula no Controle DataGridView dos Windows Forms

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

Os grupos de células que compartilham estilos podem incluir todas as células em determinadas linhas ou colunas, 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 as informações de estilo de mais de um lugar. Por exemplo, talvez você queira que todas as células em um DataGridView controle usem a mesma fonte, mas somente as células em colunas de moeda usem o formato de moeda e somente as células de moeda com números negativos usem uma cor vermelha de primeiro plano.

A classe DataGridViewCellStyle

A DataGridViewCellStyle classe 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 DataGridViewCellStyle referência e os tópicos listados na seção Consulte também abaixo.

Usando objetos DataGridViewCellStyle

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

Você pode evitar a duplicação desnecessária de informações de estilo compartilhando DataGridViewCellStyle objetos entre vários DataGridView elementos. Como o conjunto de estilos nos níveis de controle, coluna e linha filtram através de cada nível até o nível da célula, você também pode evitar a duplicação de estilos, configurando somente as propriedades de estilo em cada nível, que são diferentes dos níveis acima. Isso é descrito mais detalhadamente na seção de Herança de estilo que se segue.

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

Propriedade Classes 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 os 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 os estilos de célula padrão usados por cabeçalhos de linha do controle. Substituídos pelo tema atual se os estilos visuais estiverem habilitados.
ColumnHeadersDefaultCellStyle DataGridView Obtém ou define os estilos de célula padrão usados por cabeçalhos de coluna do controle. Substituídos 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 superiores.
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.

Como mencionado acima, obter o valor de uma propriedade style instancia automaticamente um novo DataGridViewCellStyle objeto 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 HasDefaultCellStyle propriedade que você pode verificar para determinar se a DefaultCellStyle propriedade foi definida. Da mesma forma, as classes de célula têm uma HasStyle propriedade que indica se a Style propriedade foi definida.

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

Herança de estilo

Cada um DataGridViewCell obtém sua aparência de sua InheritedStyle propriedade. O DataGridViewCellStyle objeto retornado por essa propriedade herda seus valores de uma hierarquia de propriedades do tipo DataGridViewCellStyle. Essas propriedades estão listadas abaixo na ordem em que as InheritedStyle células para não 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 InheritedStyle propriedade é 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.

Properties of type DataGridViewCellStyle

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

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

A propriedade row InheritedStyle herda seus valores das propriedades a seguir.

  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 retornado por uma InheritedStyle propriedade, o valor da propriedade é obtido do primeiro estilo de célula na lista apropriada que tem a propriedade correspondente definida como um DataGridViewCellStyle valor diferente dos DataGridViewCellStyle padrões de classe.

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

Propriedade do tipo DataGridViewCellStyle Valor ForeColor de exemplo de 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 Color.Red valor da linha da célula é o primeiro valor real na lista. Isso se torna o ForeColor valor da propriedade do InheritedStylearquivo .

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

DataGridView property-value inheritance

Ao tirar proveito da 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 ColumnHeadersDefaultCellStyle propriedades e RowHeadersDefaultCellStyle do controle têm valores de propriedade inicial que substituem os valores de propriedade do DataGridView objeto retornado pela DefaultCellStyle propriedade. Se desejar que as propriedades definidas para o objeto retornado pela DefaultCellStyle propriedade sejam aplicadas a cabeçalhos de linha e coluna, você deverá definir as propriedades correspondentes dos objetos retornados pelas ColumnHeadersDefaultCellStyle propriedades e RowHeadersDefaultCellStyle para os padrões indicados para a DataGridViewCellStyle classe.

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 quaisquer estilos especificados por essas propriedades.

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

Configurando estilos dinamicamente

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

Observação

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

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

Observação

Armazenar em cache os valores armazenados na propriedade da Style 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 de "não definido" garantirá 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 da InheritedStyle célula.

Confira também