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:
|
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:
|
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 :
O DataSource ClientesDataSet exibindo a estrutura da tabela Clientes com os campos: Codigo, Nome, Endereco, Foto e Renda;
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
Me.Validate()
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") Me.ClientesBindingSource.EndEdit() Me.ClientesTableAdapter.Update(Me.ClientesDataSet.Clientes) End If Catch ex As ExceptionMsgBox("Um erro ocorreu ao incluir/alterar o registro. Confira a digitação!")
End
Try |
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.ClickClientesBindingSource.CurrencyManager.CancelCurrentEdit() |
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# |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizado na linguagem C#
Curso VB .NET Básico - Vídeo Aulas
Curso C# Basico - Vídeo Aulas