Você está na página 1de 5

3/15/12

U ando e Ab

ando do Da aG idVie

VB 2005 - Usando e Abusando do DataGridView


Eu particularmente gosto muito dos Grids, desde a poca do VB3, quando o espartano Grid32.Ocx causa sensao com seus 'recursos'. No d nem para comparar os grids das verses anteriores com o DataGridView presente na verso 2.0 da plataforma .NET ou no Visual Basic 2005. Nem mesmo o DataGrid da verso anterior se compara em recursos e em facilidade de uso ao DataGridView. Diante de tal superioridade seriamos negligentes se no procurssemos aprender a usar os novos recursos. Este o objetivo deste artigo. Provavelmente este ser o primeiro artigo de uma srie visto que o assunto vastssimo. Ento ao artigo... Para acompanhar este artigo voc vai precisar dos seguintes recursos devidamente instalados:
Documentao MSDN sobre o Visual Studio -> http://msdn2.microsoft.com/es-es/library/ms269115(es-es,vs.80).aspx Visual Basic 2005 Express SQL Server 2005 Express

Nota: No final de Outubro ser lanado no Super DVD VB contendo o site completo off-line, programas fontes em VB 2005 e Asp.Net e C#. Alm disto voc receber no DVD, como bnus, as verses 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 instrues em portugus 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 viso abrangente dos dados ao usurio final. Ele fcil de configurar e estender e fornece muitas propriedades, mtodos e eventos que pode ser usados para personalizar sua aparncia e comportamento. Embora voc ainda possa usar o DataGrid na verso 2.0 quando precisar exibir dados em um grid no pense duas vezes use o DataGridView pois alm 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 so as clulas, elas so formadas pela interseo de linhas e colunas e podem ser acessadas em uma linha ou pela seleo da interseo linha/coluna que so retornadas na propriedade SelectedCells na forma de coleo. Eu no vou perder tempo comparando os dois controles apenas vou deixar registrado que o nico recurso que no foi incorporado ao DataGridView a exibio hierrquica da informao de duas tabelas relacionadas em um nico controle. No DataGridView so necessrios dois controles para obter o mesmo resultado; assim voc vai precisar de dois controles DataGridView para exibir informao de duas tabelas que possuem um relacionamento : mestredetalhes.

Novos Recursos do DataGridView


Dentre os in meros recursos presentes no controle destacamos os seguintes: Novo Recurso do DataGridView M ltiplos tipos de colunas Descrio O controle DataGridView suporta os seguintes controles nas respectivas clulas : TextBox, CheckBox, Image, Button, Combobox e coluna com links. O controle pode exibir: dados no vinculados armazenados no controle, ados de um fonte de dados vinculada ou dados vinculados e no vinculados juntos. O controle fornece muitas propriedades e eventos que permite a especificao de como os dados sero formatados e exibidos. Alm disto o controle fornece diversas formas de trabalhar com dados, assim, voc pode:
1/5

M ltiplas maneiras de exibio de dados

.maco a i.ne / bn5_ d .h m

3/15/12

U ando e Ab

ando do Da aG idVie

M ltiplas formas de personalizar e exibir dados

ordenar dados; permitir o modo de seleo por linha, coluna ou clula; multiseleo ou seleo nica; copiar o conte do do clipboard em m ltiplos formatos incluindo: texto, CSV e HTML Alterar a forma como os usurios editam o conte do da clula. O controle permite que voc trabalhe com os componentes individuais do Grid. Assim , voc pode: Congelar linhas e colunas para no permitir a rolagem; esconder linhas , colunas e cabealhos; alterar a forma da linha faz com que o tamanho da coluna e cabealho se ajuste; Alterar o modo como os usurio fazem seleo; Fornecer dicas e menus de atalhos para clulas, linhas e colunas individuais; Personalizar os estilos das bordas das clulas, linhas e colunas. O Controle fornece a infra-estrutura para estender e customizar o grid pela implementao de interfaces, novas aparncias das clulas, linhas e colunas

M ltiplas opes de alterao de aparncia e comportamento de clula, linha, coluna e cabealho

Personalizao

Estrutura B sica do DataGridView


As classes primrias da companhia DataGridView derivam de DataGridViewElement.

A classe DataGridViewElement fornece a referncia para o controle pai DataGridView e possui a propriedade State que trata o valor que representa a combinao dos valores da enumerao DataGridViewElementStates. O controle DataGridView compreender dois fundamentais tipos de objetos: c lulas e bandas. Todas as clulas derivam da classe DataGridViewCell. Existem dois tipos de bandas: DataGridViewColumn e DataGridViewRow sendo que ambas derivam da classe DataGridViewBand. Alm disto o controle interage com diversas classes sendo as mais comuns : DataGridViewCell, DataGridViewColumn, e DataGridViewRow. A clula, como eu j disse, a unidade bsica de interao para o DataGridView. A exibio est centrada nas clulas e a entrada de dados frequentemente realizada atravs das clulas. Voc pode acessar clulas usando a coleo Cells da classe DataGridViewRow e voc pode acessar as clulas selecionadas usando a coleo SelectedCells do controle. Vejamos o esquema a seguir:

.maco a i.ne / bn5_ d .h m

2/5

3/15/12

U ando e Ab

ando do Da aG idVie

Diagrama de classe de DataGridViewCell

Propriedades e classes das c lulas

A classe abstrata DataGridViewCell e de onde todas as clulas derivam; ela e os seus tipos derivados no so controles do tipo Windows Forms. Os objetos DataGridViewCell no controlam sua prpria aparncia ao invs o DataGridView o responsvel pela aparncia dos objetos DataGridViewCell. Para compreender a estrutura bsica do controle DataGridView temos que compreender como o objeto DataGridViewCell funciona. Para as clulas em uma coluna que no est vinculada e o grid no est no modo virtual, as clulas armazenam o valor na instncia da clula. Para clulas vinculadas a dados a clula no sabe ou mantm o valor. A qualquer momento que precisar obter o valor da clula o grid vai at a fonte de dados e procura pelo valor para a coluna e linha e retorna o valor da clula. No modo virtual a rotina similar exceto pelo fato do grid disparar o evento CellValueNeeded para obter o valor da clula. A nvel de clula tudo isto controlado pelo mtodo GetValue do DataGridViewCell. O tipo de dado padro para a propriedade Value da clula o tipo Object. Quando a coluna torna-se vinculada sua propriedade ValueType definida o que faz com que cada ValueType das clulas seja atualizado. O valor da propriedade ValueType importante para formatao.

Um exemplo prtico
Teoria que nem remdio amargo, todo mundo torce o nariz, mas o que realmente ajuda a resolver muitos problemas. Depois de tanta teoria vamos a um exemplo prtico 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 padro 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- Aps arrastar a tabela clientes para o formulrio do projeto ser criado no DataGridView e os componentes: ClientesDataSet, ClientesBindingSource , ClientesAdapter e ClientesBindingNavigator;

.maco a i.ne / bn5_ d .h m

3/5

3/15/12

U ando e Ab

ando do Da aG idVie

Se voc espiar o cdigo ver que assistente criou o cdigo bsico para preencher o DataGridView. Vamos dar uma mo para o assistente incluindo cdigo para efetuar a validao de entrada de dados nas clulas do DataGridView. Assim no evento Click do ClientesBindingNavigatorSaveItem inclua o seguinte cdigo:
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 obrigatrio.", MsgBoxStyle.Information, "Erro") ElseIf ClientesDataGridView.CurrentRow.Cells(2).Value.ToString.Trim = "" Then MsgBox("Campo Endereco de preenchimento obrigatrio.", MsgBoxStyle.Information, "Erro") ElseIf ClientesDataGridView.CurrentRow.Cells(3).Value.ToString.Trim = "" Then MsgBox("Campo Foto de preenchimento obrigatrio.", MsgBoxStyle.Information, "Erro") ElseIf Not IsNumeric(ClientesDataGridView.CurrentRow.Cells(4).Value) Then MsgBox("Preencha o campo Renda somente com valores numricos", 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 digitao!") End Try End Sub

A seguir inclua o seguinte cdigo 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
.maco a i.ne / bn5_ d .h m 4/5

3/15/12

U ando e Ab

ando do Da aG idVie

Apenas para lembrar, o evento Load possui o seguinte cdigo:


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 cdigo temos um Grid editvel e com validao. Voc pode estender e aperfeioar a validao usada.

At o prximo artigo VB.NET 2005.


Jos Carlos Macoratti

.maco a i.ne / bn5_ d .h m

5/5