Como criar um componente DataGridView customizado em C#

Olá pessoal,

Algumas vezes precisamos mudar as cores e/ou funcionalidades dos componentes de nosso programa. Para isso, ao invés de configurar um por um, podemos criar um novo componente herdando as características do componente original.
Neste exemplo eu criei um DataGridView com as linhas com cores alternadas em azul e ao clicar em uma célula toda a linha é selecionada. Ficou assim:



Para fazer isto é muito simples. Precisamos apenas criar uma nova classe para o projeto (Shift + Alt + C) e fazê-la herdar da classe DataGridView. Após isto, basta sobrescrevermos(override) o método InitLayout() para nossas necessidades.

Abaixo está o código da classe criada comentado com todas as alterações que fiz.

//Adicionar esta biblioteca
using System.Windows.Forms;

namespace CriarComponentes
{
//Herdar da classe DataGridView
class DataGridViewAlternado : DataGridView
{
    protected override void InitLayout()
    {
        base.InitLayout();

        //Cor de fundo das linhas
        this.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(184, 204, 228);

        //Cor do texto
        this.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(0, 0, 0);

        //Cor de fundo das linhas alternadas
        this.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(219, 229, 241);

        //Cor do texto das linhas alternadas
        this.AlternatingRowsDefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(0, 0, 0);

        //Cor de fundo da linha selecionada
        this.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(78, 129, 189);

        //Cor do texto da linha selecionada
        this.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(255, 255, 255);

        //Cor de fundo do DataGridView (parte sem nenhuma informação)
        this.BackgroundColor = System.Drawing.Color.FromArgb(220, 220, 220);

        //Gosto de deixar o modo de seleção como FullRowSelect, desta forma ao clicar em uma célula a linha inteira é marcada
        this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    }
}


Após o projeto ser compilado o novo componente será adicionado ao Toolbox, ficando ao seu dispor junto com os demais.



Esta customização pode ser feita em qualquer componente e é muito útil para centralizar estilos. Gosto de comparar esta técnica às folhas de estilos .css, usadas em html, porém com a diferença que neste caso é possível alterar funcionalidades, enquanto o css limita-se ao design.

Até a próxima!

Um comentário:

  1. Olá primeiro parabéns pelo blog é muito bom! Acabo de encontrar e tentei seguir este tutorial a um projeto meu , infelizmente o componente não foi adicionado ao Toolbox, sabe o que pode ser?

    ResponderExcluir

Não esqueça de enviar um comentário. Isto motiva o autor a continuar postando e também é uma forma de agradecimento