Compartilhar via


Visão geral do controle DataGrid (Windows Forms)

Observação

O controle DataGridView substitui e adiciona funcionalidade ao controle DataGrid; no entanto, o controle DataGrid é mantido para compatibilidade com versões anteriores e uso futuro, se você escolher. Para obter mais informações, consulte Diferenças entre os Windows Forms DataGridView e DataGrid Controls.

O controle DataGrid do Windows Forms exibe dados em uma série de linhas e colunas. O caso mais simples é quando a grade é associada a uma fonte de dados com uma única tabela que não contém relações. Nesse caso, os dados são exibidos em linhas e colunas simples, como em uma planilha. Para obter mais informações sobre como associar dados a outros controles, consulte Associação de Dados edo Windows Forms.

Se o DataGrid estiver associado a dados com várias tabelas relacionadas e se a navegação estiver habilitada na grade, a grade exibirá expansores em cada linha. Com um expansor, o usuário pode se mover de uma tabela pai para uma tabela filho. A tabela filho é exibida ao clicar em um nó; a tabela pai original é exibida ao clicar em um botão Voltar. Dessa forma, a grade exibe as relações hierárquicas entre tabelas.

A captura de tela a seguir mostra um DataGrid associado a dados com várias tabelas:

um aplicativo WinForms mostrando um DataGrid associado a dados com várias tabelas.

O DataGrid pode fornecer uma interface do usuário para um conjunto de dados, navegação entre tabelas relacionadas e recursos avançados de formatação e edição.

A exibição e a manipulação de dados são funções separadas: o controle manipula a interface do usuário, enquanto as atualizações de dados são tratadas pela arquitetura de associação de dados do Windows Forms e pelos provedores de dados do .NET Framework. Portanto, vários controles associados à mesma fonte de dados permanecerão em sincronia.

Observação

Se você estiver familiarizado com o controle DataGrid no Visual Basic 6.0, encontrará algumas diferenças significativas no controle DataGrid do Windows Forms.

Quando a grade é associada a um DataSet, as colunas e linhas são automaticamente criadas, formatadas e preenchidas. Para obter mais informações, consulte Data Binding e Windows Forms. Após a geração do controle DataGrid, você pode adicionar, excluir, reorganizar e formatar colunas e linhas, dependendo de suas necessidades.

Associando dados ao controle

Para que o controle DataGrid funcione, ele deve ser associado a uma fonte de dados usando as propriedades DataSource e DataMember no tempo de design ou o método SetDataBinding em tempo de execução. Essa associação aponta o DataGrid para um objeto de fonte de dados instanciado, como um DataSet ou DataTable). O controle DataGrid mostra os resultados das ações executadas nos dados. A maioria das ações específicas de dados não são executadas por meio do DataGrid, mas sim por meio da fonte de dados.

Se os dados no conjunto de dados associado forem atualizados por meio de qualquer mecanismo, o controle DataGrid refletirá as alterações. Se a grade de dados e seus estilos de tabela e estilos de coluna tiverem a propriedade ReadOnly definida como false, os dados no conjunto de dados poderão ser atualizados por meio do controle DataGrid.

Somente uma tabela pode ser mostrada no DataGrid de cada vez. Se uma relação pai-filho for definida entre tabelas, o usuário poderá se mover entre as tabelas relacionadas para selecionar a tabela a ser exibida no controle DataGrid. Para obter informações sobre como associar um controle DataGrid a uma fonte de dados ADO.NET em tempo de design ou em tempo de execução, consulte Como associar o controle DataGrid dos Windows Forms a uma Fonte de Dados.

As fontes de dados válidas para o DataGrid incluem:

Se sua origem for um conjunto de dados, o conjunto de dados poderá ser um objeto no formulário ou um objeto passado para o formulário por um serviço Web XML. É possível associar a conjuntos de dados tipados ou não tipados.

Você também pode associar um controle DataGrid a estruturas adicionais se os objetos na estrutura, como os elementos em uma matriz, exporem propriedades públicas. A tabela exibirá todas as propriedades públicas dos elementos na estrutura. Por exemplo, se você associar o controle DataGrid a uma matriz de objetos de cliente, a grade exibirá todas as propriedades públicas desses objetos do cliente. Em alguns casos, isso significa que, apesar de ser possível associar à estrutura, a estrutura associada resultante poderá não ter aplicação prática. Você pode, por exemplo, associar a uma matriz de inteiros, mas, como o tipo de dados Integer não dá suporte a uma propriedade pública, a grade não consegue exibir nenhum dado.

Será possível se associar às seguintes estruturas se os elementos delas expuserem propriedades públicas:

  • Qualquer componente que implemente a interface IList. Isso inclui matrizes de dimensão única.

  • Qualquer componente que implemente a interface IListSource.

  • Qualquer componente que implemente a interface IBindingList.

Para obter mais informações sobre possíveis fontes de dados, consulte fontes de dados compatíveis com o Windows Forms.

Exibição de grade

Um uso comum do controle DataGrid é exibir uma única tabela de dados de um conjunto de dados. No entanto, o controle também pode ser usado para exibir várias tabelas, incluindo tabelas relacionadas. A exibição da grade é ajustada automaticamente de acordo com a fonte de dados. A tabela a seguir mostra o que é exibido para várias configurações.

Conteúdo do conjunto de dados O que é exibido
Tabela única. A tabela é exibida em uma grade.
Várias tabelas. A grade pode exibir uma visualização de árvore que os usuários podem navegar para localizar a tabela que desejam exibir.
Várias tabelas relacionadas. A grade pode exibir uma visualização em árvore para selecionar tabelas ou você pode especificar que a grade exiba a tabela principal. Os registros na tabela pai permitem que os usuários naveguem até linhas filho relacionadas.

Observação

Tabelas em um conjunto de dados estão relacionadas usando um DataRelation. Consulte também Criar relações entre conjuntos de dados.

Quando o controle DataGrid está exibindo uma tabela e a propriedade AllowSorting é definida como true, os dados podem ser reordenados clicando nos cabeçalhos das colunas. O usuário também pode adicionar linhas e editar células.

As relações entre um conjunto de tabelas são exibidas aos usuários usando uma estrutura pai/filho de navegação. As tabelas pai são o nível mais alto de dados; as tabelas filho são as tabelas de dados derivadas de listagens de individuais nas tabelas pai. Os expansores são exibidos em cada linha pai que contém uma tabela filho. Ao clicar em um expansor, é gerada uma lista de links semelhantes a links Web para as tabelas filho. Quando o usuário seleciona um link, a tabela filha é exibida. Clicar no ícone mostrar/ocultar linhas pai (Mostrar/ocultar o ícone de linhas pai) ocultará as informações sobre a tabela pai ou fará com que ela reapareça se o usuário a tiver ocultado anteriormente. O usuário pode clicar em um botão Voltar para voltar para a tabela exibida anteriormente.

Colunas e linhas

O DataGrid consiste em uma coleção de objetos DataGridTableStyle contidos na propriedade DataGrid do controle TableStyles. Um estilo de tabela pode conter uma coleção de objetos DataGridColumnStyle contidos na propriedade GridColumnStyles do DataGridTableStyle.. Você pode editar as propriedades e usando editores de coleção acessados por meio da janela Propriedades do .

Qualquer DataGridTableStyle associado ao controle DataGrid pode ser acessado por meio do GridTableStylesCollection. O GridTableStylesCollection pode ser editado no designer com o editor de coleções DataGridTableStyle ou programaticamente através da propriedade DataGrid do controle TableStyles.

A ilustração a seguir mostra os objetos incluídos no controle DataGrid:

Diagrama que mostra objetos incluídos no controle DataGrid.

Estilos de tabela e estilos de coluna são sincronizados com objetos DataTable e objetos DataColumn definindo suas propriedades MappingName para as propriedades TableName e ColumnName apropriadas. Quando um DataGridTableStyle que não tem estilos de coluna é adicionado a um controle DataGrid associado a uma fonte de dados válida e a propriedade MappingName desse estilo de tabela é definida como uma propriedade de TableName válida, uma coleção de objetos DataGridColumnStyle é criada para esse estilo de tabela. Para cada DataColumn encontrada na coleção Columns do DataTable, um DataGridColumnStyle correspondente é adicionado ao GridColumnStylesCollection. GridColumnStylesCollection é acessado por meio da propriedade GridColumnStyles do DataGridTableStyle. As colunas podem ser adicionadas ou excluídas da grade usando o método Add ou Remove no GridColumnStylesCollection. Para obter mais informações, consulte Como adicionar tabelas e colunas ao controle DataGrid do Windows Forms e Como excluir ou ocultar colunas no controle DataGrid do Windows Forms.

Uma coleção de tipos de coluna estende a classe DataGridColumnStyle com recursos avançados de formatação e edição. Todos os tipos de coluna herdam da classe base DataGridColumnStyle. A classe criada depende da propriedade DataType do DataColumn da qual o DataGridColumn se baseia. Por exemplo, uma DataColumn que tem sua propriedade DataType definida como Boolean será associada ao DataGridBoolColumn. A tabela a seguir descreve cada um desses tipos de coluna.

Tipo de coluna Descrição
DataGridTextBoxColumn Aceita e exibe dados como cadeias de caracteres formatadas ou não formatadas. As funcionalidades de edição são as mesmas para editar dados em um TextBoxsimples. Herda de DataGridColumnStyle.
DataGridBoolColumn Aceita e exibe true, falsee valores nulos. Herda de DataGridColumnStyle.

Clicar duas vezes na borda direita de uma coluna redimensiona a coluna para exibir sua legenda completa e a entrada mais ampla.

Estilos de tabela e estilos de coluna

Assim que tiver estabelecido o formato padrão do controle DataGrid, você poderá personalizar as cores que serão usadas quando determinadas tabelas forem exibidas dentro da grade de dados.

Isso é feito criando instâncias da classe DataGridTableStyle. Os estilos de tabela especificam a formatação de tabelas específicas, diferente da formatação padrão do próprio controle DataGrid. Cada tabela pode ter apenas um estilo de tabela definido para ela de cada vez.

Às vezes, você desejará que uma coluna específica pareça diferente do restante das colunas de uma tabela de dados específica. Você pode criar um conjunto personalizado de estilos de coluna usando a propriedade GridColumnStyles.

Os estilos de coluna estão relacionados a colunas em um conjunto de dados, assim como os estilos de tabela, estão relacionados a tabelas de dados. Assim como cada tabela pode ter apenas um estilo de tabela definido para ela de cada vez, cada coluna também pode ter apenas um estilo de coluna definido para ela, em um estilo de tabela específico. Essa relação é definida na propriedade MappingName da coluna.

Se você tiver criado um estilo de tabela sem estilos de coluna adicionados a ele, o Visual Studio adicionará estilos de coluna padrão quando o formulário e a grade forem criados em tempo de execução. No entanto, se você criou um estilo de tabela e adicionou estilos de coluna a ele, o Visual Studio não criará nenhum estilo de coluna. Além disso, você precisará definir estilos de coluna e atribuí-los com o nome de mapeamento para que as colunas desejadas apareçam na grade.

Como você especifica quais colunas estão incluídas na grade de dados atribuindo-lhes um estilo de coluna e nenhum estilo de coluna foi atribuído às colunas, você pode incluir colunas de dados no conjunto de dados que não são exibidos na grade. No entanto, como a coluna de dados está incluída no conjunto de dados, você pode editar programaticamente os dados que não são exibidos.

Observação

Em geral, crie estilos de coluna e adicione-os à coleção de estilos de coluna antes de adicionar estilos de tabela à coleção de estilos de tabela. Quando você adiciona um estilo de tabela vazio à coleção, os estilos de coluna são gerados automaticamente para você. Consequentemente, uma exceção será gerada se você tentar adicionar novos estilos de coluna com valores de MappingName duplicados à coleção de estilos de coluna.

Às vezes, você desejará apenas ajustar uma coluna entre muitas colunas; por exemplo, o conjunto de dados contém 50 colunas e você deseja apenas 49 delas. Nesse caso, é mais fácil importar todas as 50 colunas e remover programaticamente uma, em vez de adicionar programaticamente cada uma das 49 colunas individuais desejadas.

Formatação

A formatação que pode ser aplicada ao controle DataGrid inclui estilos de borda, estilos de linha de grade, fontes, propriedades de legenda, alinhamento de dados e cores de plano de fundo alternadas entre linhas. Para obter mais informações, consulte Como formatar o controle DataGrid do Windows Forms.

Eventos

Além dos eventos de controle comuns, como MouseDown, Entere Scroll, o controle DataGrid dá suporte a eventos associados à edição e navegação dentro da grade. A propriedade CurrentCell determina qual célula está selecionada. O evento CurrentCellChanged é gerado quando o usuário navega para uma nova célula. Quando o usuário navega até uma nova tabela por meio de relações pai/filho, o evento Navigate é gerado. O evento BackButtonClick é gerado quando o usuário clica no botão voltar quando o usuário está exibindo uma tabela filho e o evento ShowParentDetailsButtonClick é gerado quando o ícone mostrar/ocultar linhas pai é clicado.

Consulte também