VB .NET - Usando e Abusando do DataGridView


Eu particularmente gosto muito dos Grids, desde a época do VB3, quando o espartano Grid32.Ocx causa sensação com seus 'recursos'.

Não dá nem para comparar os grids das versões anteriores com o DataGridView presente na versão 2.0 da plataforma .NET ou no Visual Basic 2005. Nem mesmo o DataGrid da versão anterior se compara em recursos e em facilidade de uso ao DataGridView.

Diante de tal superioridade seriamos negligentes se não procurássemos aprender a usar os novos recursos. Este é o objetivo deste artigo. Provavelmente este será o primeiro artigo de uma série visto que o assunto é vastíssimo. Então ao artigo...

Para acompanhar este artigo você vai precisar dos seguintes recursos devidamente instalados:

Nota: No final de Outubro será lançado no Super DVD VB contendo o site completo off-line, programas fontes em VB 2005 e Asp.Net e C#. Além disto você receberá no DVD, como bônus, as versões completas do Visual Basic 2005 Express Edition, Visual Web Developer Express, SQL Server 2005 Express Edition , .NET Framework 2.0 e SDK preparadas e prontas para instalar com instruções em português para você poder usufruir de todo o poder das ferramentas Express.

Apresentando o DataGridView

O DataGridView é um controle que  serve para exibir dados no formato tabular de linhas e colunas de diferentes tipos de fontes de dados proporcionando uma visão abrangente dos dados ao usuário final. Ele é fácil de configurar e estender e fornece muitas propriedades, métodos e eventos que pode ser usados para personalizar sua aparência e comportamento. Embora você ainda possa usar o DataGrid na versão 2.0 quando precisar exibir dados em um grid não pense duas vezes use o DataGridView pois além dos recursos já citados ele tem um melhor desempenho.(O DataGrid somente foi mantido na versão 2.0 por um questão de compatiblidade.)

Os tijolos que montam o DataGridView são as células, elas são formadas pela interseção de linhas e colunas e podem ser acessadas em uma linha ou pela seleção da interseção linha/coluna que são retornadas na propriedade SelectedCells na forma de coleção.

Eu não vou perder tempo comparando os dois controles apenas vou deixar registrado que o único recurso que não foi incorporado ao DataGridView é a exibição hierárquica da informação de duas tabelas relacionadas em um único controle. No DataGridView são necessários dois controles para obter o mesmo resultado; assim você vai precisar de dois controles DataGridView para exibir informação de duas tabelas que possuem um relacionamento : mestre-detalhes.

Novos Recursos do DataGridView

Dentre os inúmeros recursos presentes no controle destacamos os seguintes:

Novo Recurso do DataGridView Descrição
Múltiplos tipos de colunas O controle DataGridView suporta os seguintes controles nas respectivas células : TextBox, CheckBox, Image, Button, Combobox e coluna com links.
Múltiplas maneiras de exibição de dados O controle pode exibir:  dados não vinculados armazenados no controle, ados de um fonte de dados vinculada ou dados vinculados e não vinculados juntos.
Múltiplas formas de personalizar e exibir dados O controle fornece muitas propriedades e eventos que permite a especificação de como os dados serão formatados e exibidos. Além disto o controle fornece diversas formas de trabalhar com dados, assim, você pode:
  • ordenar dados;
  • permitir o modo de seleção por linha, coluna ou célula; multi-seleção ou seleção única;
  • copiar o conteúdo do clipboard em múltiplos formatos incluindo: texto, CSV e HTML
  • Alterar a forma como os usuários editam o conteúdo da célula.
Múltiplas opções de alteração de aparência e comportamento de célula, linha, coluna e cabeçalho O controle permite que você trabalhe com os componentes individuais do Grid. Assim , você pode:
  • Congelar linhas e colunas para não permitir a rolagem;
  • esconder linhas , colunas e cabeçalhos;
  • alterar a forma da linha faz com que o tamanho da coluna e cabeçalho se ajuste;
  • Alterar  o modo como os usuário fazem seleção;
  • Fornecer dicas e menus de atalhos para células, linhas e colunas individuais;
  • Personalizar os estilos das bordas das células, linhas e colunas.
Personalização O Controle fornece a infra-estrutura para estender e customizar o grid pela implementação de interfaces, novas aparências das células, linhas e colunas

Estrutura Básica do DataGridView

As classes primárias da companhia DataGridView derivam de DataGridViewElement.

A classe DataGridViewElement fornece a referência para o controle pai DataGridView e possui a propriedade State que trata o valor que representa a combinação dos valores da enumeração  DataGridViewElementStates.

 

O controle DataGridView compreender dois fundamentais tipos de objetos:  células e bandas. Todas as células derivam da classe DataGridViewCell. Existem dois tipos de bandas: DataGridViewColumn e DataGridViewRow sendo que ambas derivam da classe DataGridViewBand. Além disto o controle interage com diversas classes sendo as mais comuns : DataGridViewCell, DataGridViewColumn, e DataGridViewRow.

 

A célula, como eu já disse, é a unidade básica de interação para o DataGridView. A exibição está centrada nas células e a entrada de dados é frequentemente realizada através das células. Você pode acessar células usando a coleção Cells da classe DataGridViewRow e você pode acessar as células selecionadas usando a coleção SelectedCells do controle.

 

Vejamos o esquema a seguir:

 

 

 

Diagrama de classe de DataGridViewCell

Propriedades e classes das células

 

A classe abstrata DataGridViewCell e de onde todas as células derivam; ela e os seus tipos derivados não são controles do tipo Windows Forms.  Os objetos  DataGridViewCell não controlam sua própria aparência ao invés o DataGridView é o responsável pela aparência dos objetos DataGridViewCell.

 

Para compreender a estrutura básica do controle DataGridView temos que compreender como o objeto DataGridViewCell funciona.

 

Para as células em uma coluna que não está vinculada e o grid não está no modo virtual, as células armazenam o valor na instância da célula. Para células vinculadas a dados a célula não sabe ou mantém o valor. A qualquer momento que precisar obter o valor da célula o grid vai até a fonte de dados e procura pelo valor para a coluna e linha e retorna o valor da célula.

 

No modo virtual a rotina é similar exceto pelo fato do grid disparar o evento CellValueNeeded para obter o valor da célula. A nível de célula tudo isto é controlado pelo método GetValue do DataGridViewCell.

 

O tipo de dado padrão para a propriedade Value da célula é o tipo Object. Quando a coluna torna-se vinculada sua propriedade ValueType é definida o que faz com que cada ValueType das células seja atualizado. O valor da propriedade ValueType é importante para formatação.

 

Um exemplo prático

 

Teoria é que nem remédio amargo, todo mundo torce o nariz, mas é o que realmente ajuda a resolver muitos problemas. Depois de tanta teoria vamos a um exemplo prático usando o DataGridView no VB 2005:

 

Nosso objetivo é exibir os dados da tabela Clientes da base de dados Clientes. Primeiro eu vou criar um novo projeto no Visual Basic 2005 com o nome de dgVbNet. A seguir eu vou criar uma base de dados padrão SQL Server 2005.  Para saber como criar a base de dados , a tabela e como incluir dados acompanhe o artigo :  VB.NET  2005 -  Acesso a fonte de dados SQL Server via código

 

Na janela do projeto teremos :

  1. O DataSource ClientesDataSet exibindo a estrutura da tabela Clientes com os campos: Codigo, Nome, Endereco, Foto e Renda;

  2. Após arrastar a tabela clientes para o formulário do projeto será criado no DataGridView e os componentes: ClientesDataSet, ClientesBindingSource , ClientesAdapter e ClientesBindingNavigator;

 

Se você espiar o código verá que assistente criou o código básico para preencher o DataGridView.

 

Vamos dar uma mão para o assistente incluindo código para efetuar a validação de entrada de dados nas células do DataGridView.

 

Assim no evento Click do ClientesBindingNavigatorSaveItem inclua o seguinte código:

 

Private Sub ClientesBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles
ClientesBindingNavigatorSaveItem.Click


Try


Me
.Validate()


If
ClientesDataGridView.CurrentRow.Cells(1).Value.ToString.Trim = ""
Then

      MsgBox("Campo Nome de preenchimento obrigatório.", MsgBoxStyle.Information, "Erro")

ElseIf ClientesDataGridView.CurrentRow.Cells(2).Value.ToString.Trim = "" Then

     MsgBox("Campo Endereco de preenchimento obrigatório.", MsgBoxStyle.Information, "Erro")

ElseIf ClientesDataGridView.CurrentRow.Cells(3).Value.ToString.Trim = "" Then

     MsgBox("Campo Foto de preenchimento obrigatório.", MsgBoxStyle.Information, "Erro")
ElseIf Not IsNumeric(ClientesDataGridView.CurrentRow.Cells(4).Value) Then
     MsgBox("Preencha o campo Renda somente com valores numéricos", MsgBoxStyle.Information,"Erro")
Else

    Me.ClientesBindingSource.EndEdit()

    Me.ClientesTableAdapter.Update(Me.ClientesDataSet.Clientes)

End If

Catch ex As Exception

   MsgBox("Um erro ocorreu ao incluir/alterar o registro. Confira a digitação!")

End Try
 

End Sub

 

A seguir inclua o seguinte código para os eventos AddNewItem e DeleteItem do projeto:
 

Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
BindingNavigatorDeleteItem.Click

ClientesBindingSource.CurrencyManager.CancelCurrentEdit()

End Sub

Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click

ClientesBindingSource.CurrencyManager.CancelCurrentEdit()

End Sub

Apenas para lembrar, o evento Load possui o seguinte código:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      Me.ClientesTableAdapter.Fill(Me.ClientesDataSet.Clientes)

End Sub

Pronto ! Com estas poucas linhas de código temos um Grid editável e com validação. Você pode estender e aperfeiçoar a validação usada.

Até o próximo artigo VB.NET.


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti