Você está na página 1de 55

1

2
3
4
5
6
7
8
9
10
11
12

13 Visual Basic 2005


14 Express Edition
15
16
17
18
19
20
21
22
23
24 Autor:
25 Alexandro Vieira de Souza
26 • Visual Basic 2005 Express Edition
27
28
29
30 Iniciando um Projeto – Ambiente VB 2005
31
32

33
34
35
36
37 Para iniciar um projeto você deve ir no menu superior do VB 2005, clicar em "File" e escolher a opção
38 "New Project", quando clicar, vai aparecer essa tela, então você escolhe a opção "Windows Application",
39 para uma aplicação ao Windows e clica em Ok.
40
41
42 Ambiente de Trabalho – Ambiente VB 2005
43

44
45
46
47 • 1 – È o formulário onde você vai criar suas aplicações, como adicionar botões, imagens, labels, etc.
48 • 2 – Esse menu são as opções da ToolBox, encontrada no menu 3, que ajuda você á adicionar os botões,
49 labels, imagens e várias outras coisas.
50 • 3 – Menu 2 Superior, é responsável por boa parte do trabalho, que tem as seguintes opções de trabalho :
51

52 -• New Project – Para você iniciar um novo projeto, como foi mostrado no inicio da aula.
53
54 -• Open File – Para abrir algum projeto.
55
56 -• Add New Item – Para você adicionar um novo item, por exemplo : Um novo formulário, um novo
57 banco de dados.
58
59 -• Save "Arquivo" – Para salvar o projeto que está aberto no momento.
60
61 -• Save All – Para salvar todos os arquivos que estão abertos nas abas.
62
63 -• Cut – Recortar algo no formulário.
64 -• Copy – Para copiar algo do projeto.
65
66 -• Paste – Para colar algo que foi copiado.
67
68 -• Find – Serve para procurar algo no projeto.
69
70 -• Coment – Comentário para fora as linhas selecionadas.
71

72 -• Uncoment – (Não Conheço)


73
74 -• Undo – Desfazer algo.
75
76 -• Redo – Refazer algo.
77
78 -•Start Debugging – Para você fazer um teste do projeto, para ver se deu algum debug.
79
80 -•Break All – Para pausar o teste de projeto.
81
82 -•Stop Debugging – Para parar o teste de projeto.
83
84 -•Step Into – Pisar em...(Tradução do Google)
85
86 -•Step Over – Etapa sobre...(Tradução do Google)
87
88 -•Step Out – Etapa para fora...(Tradução do Google)
89
90 -•Solution Explorer – Explora os projetos apresentados.
91
92 -•Properties Window – Propriedades da Janela.
93
94 -•Object Browser – Importar algum objeto do browser.
95
96 -•ToolBox – Caixa de ferramente, para adicionar labels, botões, etc.
97
98 -•Error List – Mostra a lista dos erros encontrados.
99
100 • 4 – È o menu superior onde você pode, salvar, abrir, iniciar um novo projeto, etc.
101 • 5 – È tipo o Windows Explorer, com todas as partes do seu projeto dividida.
102 • 6 – Nesse local, são as propriedades do ferramenta utilizada, onde pode mudar, adicionar imagem,
103 mudar fonte, cor das letras, etc.
104 • 7 – Aí são as abas, onde ficam guardadas os projetos abertos ao mesmo tempo.
105 VB 2005 - Criando um Formulário de Pedidos com os
106 Assistentes
107

108 Neste artigo eu vou mostrar como você pode criar um formulário para efetuar o pedido de
109 venda de um produto em uma aplicação Windows Forms usando somente os assistentes de
110 configuração para Data Source.

111 Suponha que você tenha que criar um formulário de pedidos para vendas em uma aplicação
112 Windows Forms usando o VB 2005 Express Edition.

113 O modelo relacional das tabelas usadas pelo sistema é o seguinte:

114 Nota: Não vou entrar no mérito do modelo nem nos detalhes de criação do banco de dados,
115 das tabelas e dos relacionamentos. É importante efetuar a modelagem de forma correta
116 definindo as chaves primárias as chaves estrangeiras e os relacionamentos.

117 A representação do modelo relacional acima, feito para as tabelas usadas neste artigo, foi
118 obtido a partir do diagrama do banco de dados criado na IDE do Visual Basic 2005 Express
119 Edition. Abaixo temos a figura onde exibimos o diagrama criado:
120 Além disso você terá que criar uma interface que irá usar, como tabelas principais, as tabelas
121 Pedido e Itens, e que deverá receber os pedidos dos clientes e discriminar os itens destes
122 pedidos.

123 Para saber mais leia o artigo : VB.NET - Usando DataBase Diagrama

124 Abra o Visual Basic 2005 Express Edition e crie uma nova aplicação Windows Forms com o
125 nome Vendas.

126 Você deverá criar um banco de dados contendo as tabelas com a estrutura acima. No exemplo
127 mostrado neste artigo o banco de dados é identificado pelo nome livraria.mdf.

128 Altere o título do formulário form1.vb para Pedidos. Abaixo você tem uma visão do projeto
129 no VB 2005.
130 Vamos incluir um novo Data Source selecionando a partir do menu Data ou da janela Data
131 Source a opção Add New Data Source...

132 Na janela do Assistente de configuração para Data Source selecione a opção Database pois
133 estaremos efetuando a conexão um banco de dados relacional SQL Server.
134

135 Escolha a seguir a conexão com a fonte de dados. Se ela não existir clique no botão New
136 Connection e selecione o tipo da fonte de dados e sua localização;

137 Em seguida será apresentada a janela contendo os objetos do banco de dados livraria.mdf,
138 expanda o objeto Tables e selecione as tabelas Itens e Pedido, pois vamos trabalhar somente
139 com essas tabelas e altere o nome do dataset que será gerado para PedidosDS;
140 Na janela DataSource você verá o DataSet - PedidosDS exibindo as tabelas itens e Pedido.
141 Perceba que a tabela Pedido possui um vinculo com a tabela Itens decorrente do
142 relacionamento feito pela chave pedidoID;

143 A janela Solution Explorer também exibe o DataSet onde é possível visualizar o esquema
144 criado com base nas tabelas do banco de dados.
145 Na janela Data Sources vamos expandir a tabela Pedido e alterar o modo de exibição de
146 alguns dos seus campos, para isso basta selecionar o campo e escolher a opção desejada a
147 partir do menu;

148 • clienteID altere o modo para ComboBox


149 • formaPagamentoID altere para o modo ComboBox

150 A seguir vamos definir o modo de visualização dos campos da tabela como Details. Clique na
151 tabela e selecione este modo a partir do menu;

152 Arraste e solte a tabela no formulário form1.vb do projeto. Você deverá ver cada campo
153 sendo exibido no formato definido no DataSet; verá também a criação dos objetos abaixo na
154 bandeja do formulário;

155 • PedidoDS (dataset)


156 • PedidoBindingSource
157 • PedidoTableAdapter
158 • PedidoBindingNavigator
159 Em seguida, ainda na janela Data Sources, selecione a tabela itens que esta vinculada a
160 tabela Pedido conforme a figura (Não confunda com a tabela Itens que também foi criada no
161 dataset) e altere o modo de exibição para DataGridView

162 Arraste e solte a tabela no mesmo formulário form1.vb , logo abaixo do local onde os itens da
163 tabela pedido foram exibidos;
164 Vamos selecionar o DataGridView criado e clicar na opção Edit Columns;

165

166 Remova o campo PedidoID e selecione a coluna LivroID. Em seguida na propriedade


167 Columntype altere o seu valor para DataGridViewComboBoxColumn e clique em OK;

168 Obs: Para Remover o campo PedidoID selecione o campo e clique no botão Remove.

169 Vamos criar outro Data Source a partir da tabela livros para que possamos usar no formulário
170 de pedidos. A partir da janela Data Sources ou no menu Data Selecionando a opção Add New
171 Data Source , selecione DataBase, aceite a conexão já criada com o banco de dados
172 livraria.mdf e na janela onde são exibidos as tabelas do banco de dados selecione a tabela
173 Livros informando nome LivrosDS para o dataset a ser criado;
174 Vamos repetir o procedimento e criar mais dois novos Data Sources : ClientesDS e
175 PagmentosDS. Iremos usar estes DataSources no formulário de pedidos logo em seguida.

176 Veremos a seguir como usar os Data Sources criados. Lembra que no formulário , alteremos o
177 tipo de coluna do campo LivroID no DataGridView para DataGridViewComboBoxColumn. Pois
178 bem, agora na propriedade DataSource vamos indicar o nome LivrosDS referente ao Data
179 Source que acabamos de criar definindo as propriedades DisplayMember como titulo e
180 ValueMember como livroID;
181 Vamos agora selecionar a comboBox definida para o campo ClienteID e a partir da janela Data
182 Sources arrastar e soltar a tabela Clientes do data source ClientesDS criado. Em seguida
183 repita o procedimento para a comboBox do campo forma pagamento ID arrastando a tabela
184 Pagamentos do data source PagamentosDS;
185 Perceba que na bandeja do formulário os objetos DataSet, BindingSource e TableAdapter
186 são criados para cada Data Source usado no formulário.

187 Execute o projeto pressionando F5 e vejamos o resultado:

188 1- Note que no lugar de exibir o código do livro o DataGridView exibe uma coluna contendo
189 os títulos de cada livro;
190 2- A combobox referente a forma de pagamento agora exibe a descrição do pagamento e não
191 o seu código;

192 3- A combobox referente ao campo ClienteID exibe o nome do cliente;


193 Nota: Eu poderia ter criado um único dataset usando todas as tabelas mas resolvi mostrar
194 esta alternativo que pode ser usada se você pretende usar os data sources criados em mais de
195 um formulário.

196 E temos então o formulário completo pronto para ser usado no cadastramento de pedidos
197 usando um interface amigável que foi criada sem você ter que digitar praticamente nenhuma
198 linha de código.

199 Naturalmente faltou espaço para falar das validações e outros recursos que podem ser usados
200 para tornar a aplicação mais robusta e funcional. Essa é deixa para você atuar melhorando o
201 exemplo acima...

202 Até o próximo artigo VB.NET...

203
204 José Carlos Macoratti
205 VB 2005 - Atualizando dados com TableAdapter
206

207 Como atualizar os dados usando o TableAdapter ?

208 Após você realizar as alterações no seu DataSet você deve enviar os dados para o banco de
209 dados. Lembre-se que um DataSet trabalha no modo desconectado e se você não enviar as
210 atualizações para o banco de dados ele não refletirá as operações feitas no DataSet.

211 Se estiver usando um TableAdapter você deve usar o comando Update deste componente
212 para atualizar as tabelas correspondentes no banco de dados.

Os TableAdapters usam comandos de dados para ler e para escrever em uma fonte de dados. O
método Fill associado a consulta é a base para criar o esquema da tabela de dados associada com como
os comandos insertCommand, UpdateCommand, e DeleteCommand associados com o método Update
do TableAdapter.

Desta forma ao chamar o método Update ele executa a instrução criada quando o TableAdapter foi
originalmente configurado e não uma das consultas adicionais que podem ter sido criadas com o
Assistente de configuração do TableAdapter.

213 O componente TableAdapter ira executar os comandos : INSERT, UPDATE E DELETE tendo
214 como base os valores obtidos para a propriedade RowState.

215 A propriedade RowState obtém um dos valores da enumeração DataRowState da classe


216 DataRow. Os valores possíveis para esta enumeração são:

Nome do membro Descrição


Added A linha foi adicionada ao DataRowCollection e o método AcceptChanges não foi
Deleted A linha foi excluída usando o método Delete da DataRow.
Detached A linha foi criada mas não faz parte de qualquer DataRowCollection. A DataRow
imediatamente após ele ter sido criada e para que ela seja adicionada a uma col
removida de uma coleção.
Modified A linha tenha sido modificada e o método AcceptChanges não foi chamado.
Unchanged A linha não foi alterada desde que o método AcceptChanges foi chamado pela ú

217 Estes valores dependem de dois fatores:

218 1. Do tipo de operação que foi realizada na linha;


219 2. Se o método AcceptChanges tiver sido chamado no DataRow;

Ao invocar o método AcceptChanges para um DataRow, o método EndEdit é


implicitamente chamado para encerrar qualquer edição realizada. Se o valor da propriedade
RowState de uma linha for igual a Added ou Modified, o valor da propriedade RowState
torna-se igual a Unchanged. Se o valor de RowState for igual a Deleted a linha é removida.

A classe Datatable também possui um método AcceptChanges o qual afeta as alterações


feitas para a toda a tabela.

220 O procedimento exato para atualizar uma fonte de dados pode variar dependendo das
221 necessidades do seu negócio mas sua aplicação deverá realizar os seguintes passos:
222 1. Chamar o método Update do adaptador dentro de um bloco Try/Catch;
223 2. Se uma exceção for capturada, localize a linha de dados que causou o erro;
224 3. Corrija o erro na linha de dados e tente atualizar novamente;

Para localizar linhas que possuem erros em seu DataSet faça o seguinte:

• Verifique a propriedade HasErrors e veja se existe qualquer erro no seu dataset;


• Se a propriedade HasErrors for igual a true, então percorra a coleção de tabelas e a
seguir de
linhas para encontrar a linha com erro:

Private Sub encontraErros()


Dim table As Data.DataTable
Dim row As Data.DataRow

If DataSet1.HasErrors Then
For Each table In DataSet1.Tables
If table.HasErrors Then
For Each row In table.Rows
If row.HasErrors Then
' Processar o erro
End If
Next
End If
Next
End If
End Sub

225 Para salvar os dados para o banco de dados chame o método Update do TableAdapter
226 passando o nome da tabela que contém os valores que deverão ser escritos no banco de
227 dados.

228 O trecho de código que pode ser usado para realizar tal operação:

Try
Me.Validate()
Me.CustomersBindingSource.EndEdit()
Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
MsgBox("Atualização realizada com sucesso...")
Catch ex As Exception
MsgBox("A atualização falhou...")
End Try

229 - EndEdit - aplica as alterações pendentes a fonte de dados


230 - Update(NortwhindDataSet.Customers) - envia as alterações para o banco de dados, informando o dataset e a
231 tabela a ser atualizada;(Existem outros métodos Updates sobrecarregados onde a assinatura é diferente e com
232 isso os parâmetros informados podem variar)

233 Atualizando tabelas relacionadas


234 Quando você precisar atualizar tabelas relacionadas em um dataset é importante atualizar as
235 tabelas na sequência correta a fim de reduzir a chance de gerar um erro relacionado
236 integridade referencial.
237 A ordem de execução do comando também seguira os índices da coleção DataRowCollection
238 no dataset. Para evitar erros relacionados a integridade dos dados ocorram a melhor maneira
239 é atualizar o banco de dados usando a seguinte sequência:

240 1. Tabela filha - deletar os registros;


241 2. Tabela Pai - inserir , atualizar e deletar registros;
242 3. Tabela Filha - inserir e atualizar registros;

Um DatarowCollection é o componente principal de um objeto DataTable; enquanto que


DataColumnCollection define o esquema da tabela , DataRowCollection contém os dados
atuais da tabela, onde cada DataRow que compõe um DataRowCollection representa uma
linha única (registro).

243 Se você esta atualizando duas ou mais tabelas relacionadas deverá incluir toda a lógica de
244 atualização em uma transação. Uma transação é um processo que assegura que todas as
245 mudanças relacionadas feitas no banco de dados tenham sido completadas com sucesso antes
246 de confirmar, através do comando commit, qualquer mudança.

Transações são grupos de operações combinadas em uma unidade lógica de trabalho. Elas
são usadas para controlar e manter a consistência e integridade de cada ação na transação, a
despeito dos erros que possam ocorrer no sistema.

247 Para saber mais sobre transações veja o artigo :

248 • ADO.NET - Usando Transações


249 • ADO - Usando Transações - BeginTrans, CommitTrans e RollBack.
250 • O Processamento de Transações: BeginTrans, CommitTrans e RollBack.

251 A seguir temos um exemplo de realização de tal operação. As etapas a serem cumpridas são :

252 1. Crie três tabelas temporárias para tratar os registros diferentes;


253 2. Chame o método Update para cada subconjunto de linhas usando um bloco try/catch.
254 Se ocorrem erros, verifique e corrija;
255 3. Confirme as alterações para o banco de dados (Commit);
256 4. Libere os recursos alocados quando da criação das tabelas temporárias;

257 O exemplo abaixo trata com as tabelas Orders e Customers. Essas tabelas possui um
258 relacionamento mostrado a seguir:

A tabela Customers é a
tabela Pai e a tabela
Orders a tabela filha;

- Criamos uma tabela


para os registros
deletados;
- Uma tabela para os
novos registros;
- Uma tabela para os
registros modificados;

Private Sub AtualizaBD()


'cria as tabelas para tratar os registros diferentes: deletados, novos e modificados
Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable = _
CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)

Dim newChildRecords As NorthwindDataSet.OrdersDataTable = _


CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)

Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable = _


CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)

'Atualiza a tabela filha -> Orders


Try
If deletedChildRecords IsNot Nothing Then
OrdersTableAdapter.Update(deletedChildRecords)
End If

'atualiza a tabela Pai -> Customers


CustomersTableAdapter.Update(NorthwindDataSet.Customers)

If newChildRecords IsNot Nothing Then


OrdersTableAdapter.Update(newChildRecords)
End If

If modifiedChildRecords IsNot Nothing Then


OrdersTableAdapter.Update(modifiedChildRecords)
End If

'salva as alterações no banco de dados


NorthwindDataSet.AcceptChanges()

Catch ex As Exception
MessageBox.Show("Ocorreu um erro durante o processo de atualização")
Finally
'libera os recursos alocados
If deletedChildRecords IsNot Nothing Then
deletedChildRecords.Dispose()
End If
If newChildRecords IsNot Nothing Then
newChildRecords.Dispose()
End If
If modifiedChildRecords IsNot Nothing Then
modifiedChildRecords.Dispose()
End If
End Try
End Sub

260 Com isso temos um panorama geral sobre como atualizar dados usando um TableAdapter.

261 Além das instruções InsertCommand, UpdateCommand, and DeleteCommand, o componente


262 é criado com métodos que podem ser executados diretamente no banco de dados. Estes
263 métodos podem ser chamados diretamente para manipular dados. Os métodos são:
264 TableAdapter.Insert, TableAdapter.Update, e TableAdapter.Delete.
265 VB 2005 - Manipulando o DataGridView
266

267 O DataGridView é um controle com 1001 utilidades, flexível e poderoso se comparados com
268 controles grids das versões anteriores do VB (lembra do DBGrid, MSFlexGrid, DataGrid, etc...)
269

270 Embora não seja complicado de usar como toda novidade desperta curiosidade e dúvidas, e,
271 por este motivo este artigo procurar mostrar as maneiras mais comuns e úteis de usar o
272 controle DataGridView.

273 Para começar você vai ter que ter instalado os seguintes recursos:

274 • Visual Basic 2005 Express Edition (Aproveite é grátis)

275 O primeiro passo e abrir o VB 2005 Express e criar uma aplicação Windows Forms via opção
276 File->New Project com o nome de datagridViewTotal

277 Aqui é o ponto de partida para a nossa jornada, vamos lá...

278 Usando DataGridView com Arrays


279 Vamos definir um array chamado vetor com dois elementos e vincular o array ao
280 DataGridView usando a propriedade DataSource:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal


e As System.EventArgs) Handles MyBase.Load
'==========================================
'outras maneiras de declarar e iniciar um array
'(a)
'Dim vetor(2) As String
'vetor(0) = "Super CD VB 40,00"
'vetor(1) = "Super DVD.NET 50,00"
'(b)
'Dim vetor() As String
'vetor = New String() {"Super CD VB 40,00", "Super DVD .NET
50,00"}
'=============================================

Dim vetor() As String = {"Super CD VB 40,00", "Super DVD .NET


50,00"}
DataGridView1.DataSource = vetor

End Sub

281 Opa ! mas o que aconteceu ??? O resultado não é o esperado. Por que ?

282 Você esperava que os elementos do array fossem exibidos mas somente o tamanho de cada
283 elemento foi exibido.

284 O motivo deste comportamento é que o DataGridView procura pela primeira propriedade
285 pública do objeto ao qual esta vinculado e a primeira propriedade pública de um array de
286 strings é o tamanho de cada elemento contido no array.

287 Para fazer da maneira correta devemos envolver o array de string em uma classe que exponha
288 propriedades públicas que retornem o conteúdo de cada um dos elementos que desejamos
289 exibir.

290 Podemos fazer isso criando uma classe e definindo um construtor e uma propriedade pública
291 para ter acesso ao valor de cada elemento do vetor:

292 No menu Project -> Add Class selecione o template Class e informe o nome vetor.vb para o
293 nome da classe a seguir inclua o seguinte código na classe:

294 Voltando ao formulário form1.vb e alterando o código para usar a classe criada temos:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load

'Dim vetor() As String = {"Super CD VB 40,00", "Super DVD .NET


50,00"}
'==========================================
'outras maneiras de declarar e iniciar um array
'(a)
'Dim vetor(2) As String
'vetor(0) = "Super CD VB 40,00"
'vetor(1) = "Super DVD.NET 50,00"
'(b)
'Dim vetor() As String
'vetor = New String() {"Super CD VB 40,00", "Super DVD .NET
50,00"}
'=============================================

Dim valores() As Vetor = {New Vetor("Super CD VB 40,00"), New


Vetor("Super DVD .NET 50,00")}
DataGridView1.DataSource = valores

End Sub

295 Da mesma forma podemos vincular o controle DataGridView a um objeto mais complexo.

296 Usando DataGridView com DataSets Tipados


297 Um uso muito comum do controle DataGridView é a vinculação a uma tabela de um banco de
298 dados. Podemos efetuar esta tarefa usando um DataSet tipado.

299 Vamos incluir um dataset tipado ao projeto clicando sobre o nome do projeto com o botão
300 direito do mouse e seleciona a opção Add New Item. Na janela selecione o template DataSet
301 e clique Add;

302 Habilite o DataBase Explorer no menu View e localize o banco de dados Northwind.mdf ,
303 expanda o objeto Tables e em seguida arraste e solte a tabela Customers no descrito
304 DataSet1.xsd conforme a figura abaixo:
305 No próximo passo vamos vincular o dataset ao DataGridView e podemos fazer isto das
306 seguintes formas:

307 1- Vincular o DataGridView diretamente ao adapter da tabela Customers:

308 Inclua o projeto a seguinte declaração :

309 Imports dataGridViewTotal.DataSet1TableAdapters

310 A seguir inclua um botão de comando no formulário e inclua o código abaixo no evento Click
311 do botão:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'cria uma instância da TableAdapter
Dim da As New CustomersTableAdapter
'vincula o TableAdapter ao DataGridView
DataGridView1.DataSource = da.GetData
End Sub

312 Executando o projeto temos:


313 2- Vinculando o DataGridView a um BindginSource

314 Para este exemplo você deve criar um TableAdapter para a tabela Customers. Para fazer isso
315 inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a tabela
316 Customers do banco de dados Northwind.mdb.

317 A seguir Inclua no projeto a seguinte declaração (se ainda não o fez) :

318 Imports dataGridViewTotal.DataSet1TableAdapters

319 Agora insira um novo botão de comando e no evento Click do botão insira o código:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

'cria uma instância da TableAdapter


Dim da As New CustomersTableAdapter
'cria uma instância de um BindingSource
Dim bindsrc As New BindingSource

'define a fonte de dados para o bindingsource e obtém os dados do método GetData do TableAdapter
bindsrc.DataSource = da.GetData
'vincula o BindingSource ao DataGridView
DataGridView1.DataSource = bindsrc

End Sub

320 Usando o DataGridView com DataSets não tipados


321 Você também pode definir o dataset via código vinculando em seguida o componente ao
322 DataGridView.

323 Primeiro temos que criar e preencher um dataset para em seguida atribuir à propriedade
324 DataSource do DataGridView o dataset gerado.

325 No código estou atribuindo à propriedade DataMember a tabela gerada no dataset. Uma
326 outra maneira de obter o mesmo resultado seria atribuir diretamente a propriedade
327 DataSource a tabela gerada que no caso seria a primeira tabela (pois só temos uma) :
328 ds.tables(0). Neste caso não necessitaríamos de definir o Datamember.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'define a string de conexao


Dim connStr As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"

'define a instrução sql


Dim sql As String = "SELECT * FROM Customers"

'define os objetos connecton, command e dataadapter


Dim conn As SqlConnection = New SqlConnection(connStr)
Dim comm As SqlCommand = New SqlCommand(sql, conn)
Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)

'define o dataset
Dim ds As DataSet = New DataSet()

Try
'---abre a conexao---
conn.Open()
'---preenche o dataset---
dataadapter.Fill(ds, "Clientes")
'---fecha a conexao---
conn.Close()
'---vincula o dataset ao DataGridView---
DataGridView1.DataSource = ds 'ou ds.tables(0)
'---define a tabela a ser exibida---
DataGridView1.DataMember = "Clientes"
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

329 Obtendo o valor da célula selecionada e Atribuindo a célula


330 atual
331 Para obter o valor da célula clicada pelo usuário em um DataGridView usamos o evento
332 CellEnter:

Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As


System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter

'---Quando o usuário clicar no controle , exibe o conteudo da célula


MsgBox(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)

End Sub

333 Neste código estamos obtendo o valor da célula pelo índice da linha (e.RowIndex) e da coluna
334 (e.ColumnIndex).

335 Se desejar obter valor da primeira coluna quando o usuário selecionar uma linha o código
336 ficaria assim :

Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As


System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter

'---Quando o usuário clicar no controle , exibe o conteudo da célula referente a primeira


coluna (Column=0)
MsgBox(DataGridView1.Rows(e.RowIndex).Cells(0).Value)

End Sub
338 Para atribuir a célula atual via código podemos atribuir um valor a propriedade CurrentCell
339 do DataGridView . No código abaixo estou atribuindo a célula atual como sendo a primeira
340 linha e a segunda coluna ( row=0 e column=1)

Private Sub setCurrentCellButton_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles setCurrentCellButton.Click

' Define a célula atual para a célula na coluna 1 e linha 0


Me.dataGridView1.CurrentCell = Me.dataGridView1(1, 0)

End Sub

341 Validando a entrada de dados em uma célula


342 Podemos usar o evento CellValidating para verificar se a entrada de um usuário quando da
343 edição dos dados de uma célula estiver ocorrendo é valida ou não.

344 No exemplo acima iremos efetuar a validação da coluna CompanyName para isso devemos
345 implementar o tratamento dos eventos CellValidating e CellEndEdits.

346 O evento CellValidating ocorre quando a célula perde o foco de entrada habilitando a
347 validação do seu conteúdo.

348 O evento CellEndEdits ocorre quando o modo de edição é encerrado para a atual célula
349 selecionada.

350 No evento CellValidating é onde você determina se o valor de uma célula para um
351 determinada coluna é válida. Se a validação da célula falha defina a propriedade Cancel da
352 classe System.Windows.Forms.DataGridViewCellValidatingEventArgs para true. Isto faz com
353 que o controle DataGridView não permita que o cursor deixe a célula.

354 Definindo a propriedade ErrorText na linha para exibir uma mensagem para o usuário exibe
355 um ícone de erro com uma dica que contém o texto para o erro.
356 No evento CellEndEdit defina a propriedade ErrorText na linha para uma string vazia. Este
357 evento ocorre somente quando a célula existe no modo edit o qual não pode ocorrer se a
358 validação falhar.

359 No exemplo vamos verificar se a coluna CompanyName esta vazia para a entrada do usuário:

Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As


DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating

' Valida o entrada para o CompanyName não permitindo valores em branco


If DataGridView1.Columns(e.ColumnIndex).Name = "CompanyName" Then
If String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
DataGridView1.Rows(e.RowIndex).ErrorText = "O nome da Companhia não pode ser
vazio."
e.Cancel = True
End If
End If
End Sub
Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
' Limpa o erro da linha no caso do usuário pressionar ESC
DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
End Sub

360 Tratando ocorrências de erros em um DataGridView


361 Podemos efetuar o tratamento de erros para o controle DataGridView usando o evento
362 DataError o qual é disparado quando a fonte de dados detecta uma violação de restrição ou
363 quebra de regra de negócio.

364 A seguir temos um exemplo que quando ocorrer um valor para o campo CustomerID duplicado
365 em uma nova linha ou linha sendo editada o evento DataError irá ocorrer e será tratado pela
366 exibição de uma mensagem que descreve o erro.

Private Sub dataGridView1_DataError(ByVal sender As Object, ByVal e As


DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError

' Se a fonte de dados levanta uma exceção quando uma célula esta comitda
exibe um erro.
If e.Exception IsNot Nothing AndAlso e.Context =
DataGridViewDataErrorContexts.Commit Then
MessageBox.Show("O código do cliente - CustomerID - não pode ser
duplicado.")
End If

End Sub

367 Exibindo imagens em células de um DataGridView


368 Podemos exibir uma figura ou um gráfico em uma linha de dados. Para exibir imagens em um
369 controle DataGridView não há muito segredo pois ele trata nativamente qualquer imagem
370 suportada pela classe Image bem como o ormato de imagem OLE usado por alguns banco de
371 dados.

372 Se a fonte de dados do controle DataGridView possuir uma coluna com imagens , elas serão
373 exibida automaticamente exibidas no controle DataGridView.

374 Filtrando e ordenando colunas via código


375 Para filtrar os dados exibidos em um DataGridView podemos usar um objeto DataView. A
376 seguir temos um exemplo onde estamos filtrando os dados para o código do cliente iniciado
377 pela letra B:

378 Nota: Para este exemplo você deve criar um TableAdapter para a tabela Customers. Para
379 fazer isso inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a
380 tabela Customers do banco de dados Northwind.mdb.

381 Você deverá declarar os seguintes namespaces no projeto para que o código abaixo funcione:

382 Imports System.Data.sqlclient


383 Imports datagridviewTotal.DataSet1TableAdapters

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button2.Click

'---crria uma instância de um tableadapter ---


Dim adapter As New CustomersTableAdapter

'---cria uma instância de um dataview---


Dim dv As New DataView(adapter.GetData)

'filtra usando o criterio escolhido: clientes com código contendo B no início


With dv
.AllowNew = False
.AllowDelete = True
.Sort = "ContactTitle ASC, Address ASC"
.RowFilter = "CustomerID LIKE 'B*'"
End With
' atribui o dataview ao datagridview
DataGridView1.DataSource = dv
End Sub
384 O resultado da execução deste código será:
385
386 O dataView é obtido a partir do adapter chamando o método getData que retorna um DataTable preenchido
387 conforme a consulta SQL definida.

388 No código acima o objeto DataView permite aos usuário incluir novas linhas , via propriedade AllowNew no
389 controle DataGridView e também excluir linhas , via propriedade AllowDelete.

390 Podemos ainda ordenar as linhas especificando o campo e a ordem correspondente que será aplicada usando a
391 propriedade Sort. (ASC ordem ascendente DESC ordem descendente)

392 O filtro é feito pela expressão SQL usando a expressão LIKE via propriedade RowFilter.

393 Uma outra maneira de ordenar colunas é usar o método Sort do próprio controle DataGridView:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button3.Click

DataGridView1.Sort(DataGridView1.Columns(0),
System.ComponentModel.ListSortDirection.Descending)

End Sub

394 O código esta ordenando pela primeira coluna do componente (Columns(0)) usando a ordem
395 descendente.

396 Definindo um texto em ToolTips em células individuais


397 De forma geral usamos o recurso ToolTips para exibir valores em células do DataGridView que
398 são muito pequenas para exibir todo o conteúdo. Podemos reescrever este comportamento de
399 forma a definir textos para ToolTips para células individuais. Isto é útil para exibir informação
400 adicional sobre a célula ou para fornecer ao usuário uma descrição mais detalhada sobre o
401 conteúdo da célula.

402 Para isto eu vou usar o o evento CellFormatting que ocorre quando o conteúdo de uma célula
403 precisa ser formatado para exibição.

404 A tabela Customers não possui um campo muito adequado para um exemplo mais convincente
405 ,vou usar portanto o campo City de e escolher algumas cidades de forma que exibam o nome
406 do pais a qual pertençam. O código é o seguinte:

'Define o texto da propriedade ToolTip para células da coluna


especificada , no caso a coluna: City
Sub dataGridView1_CellFormatting(ByVal sender As Object, ByVal e
As DataGridViewCellFormattingEventArgs) _
Handles DataGridView1.CellFormatting

If e.ColumnIndex = Me.DataGridView1.Columns("City").Index AndAlso


(e.Value IsNot Nothing) Then
With Me.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
If e.Value.Equals("London") Then
.ToolTipText = "< Inglaterra >"
ElseIf e.Value.Equals("Sao Paulo") Then
.ToolTipText = "< Brasil > "
ElseIf e.Value.Equals("Madrid") Then
.ToolTipText = "< Espanha >"
ElseIf e.Value.Equals("Buenos Aires") Then
.ToolTipText = "< Argentina >"
End If
End With
End If
End Sub

407 O resultado pode ser visto na figura abaixo:


408 Exibindo uma combobox em uma célula
409 Você pode exibir uma combobox em uma célula de forma a permitir que o usuário selecione
410 valores determinados de uma lista existente. Neste caso você precisa incluir uma ComboBox
411 na célula da coluna desejada. O código abaixo faz exatamente isto usando o controle
412 BindingSource:

Private Sub Form2_Load(ByVal sender As


System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

'---inclui colunas no controle


DataGridView---
DataGridView1.Columns.Add("ID", "Codigo")
DataGridView1.Columns.Add("Nome",
"Nome Aluno")
'---define um controle bindingsource---
Dim bindingsource As New BindingSource
'---inclui itens no controle---
bindingsource.Add("Matemática")
bindingsource.Add("Português")
bindingsource.Add("História")
'---cria uma coluna do tipo combobox---
Dim comboBoxCol As New
DataGridViewComboBoxColumn
'---define o cabecalho (header) ---
comboBoxCol.HeaderText = "Disciplinas"
'---vincula os dados---
comboBoxCol.DataSource = bindingsource
'---Inclui a coluna combobox ao
DataGridView---
DataGridView1.Columns.Add(comboBoxCol)
End Sub

413 Se você não quiser usar um controle BindingSource pode incluir os itens diretamente no
414 controle DataGridViewComboBoxColumn :

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles MyBase.Load

'---inclui colunas no controle DataGridView---


DataGridView1.Columns.Add("ID", "Codigo")
DataGridView1.Columns.Add("Nome", "Nome Aluno")

'---cria uma coluna do tipo combobox---


Dim comboBoxCol As New DataGridViewComboBoxColumn

'---define o cabecalho (header) ---


comboBoxCol.HeaderText = "Disciplinas"
'---inclui itens no controle---
comboBoxCol.Items.Add("Matemática")
comboBoxCol.Items.Add("Português")
comboBoxCol.Items.Add("História")
'---Inclui a coluna combobox ao DataGridView---
DataGridView1.Columns.Add(comboBoxCol)

End Sub
415
416 Se você deseja permitir que os usuários possam incluir novos valores no controle ComboBox.
417 Neste caso você terá que fazer o seguinte :
418
419 1-) Usar o evento EditingControlShowing que ocorre quando o usuário vai tentar editar dados
420 no controle Combobox:
421
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As
System.Windows.Forms. DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing

Dim comboBoxColumn As DataGridViewComboBoxColumn = DataGridView1.Columns(2)

If (DataGridView1.CurrentCellAddress.X = comboBoxColumn.DisplayIndex) Then


Dim cb As ComboBox = e.Control
If (cb IsNot Nothing) Then
cb.DropDownStyle = ComboBoxStyle.DropDown
End If
End If
End Sub
422
423 Neste código estou verificando se a célula que esta sendo editada é do tipo ComboBox. Neste
424 caso estou definindo o estilo do ComboBox como DropDown de forma que o usuário possa
425 digitar o novo item a ser incluído.
426
427 2-) Usar o evento CellValidating do controle DataGridView que ocorre sempre que o usuário
428 termina de digitar e deixa a célula:
429
Private Sub DataGridView1_CellValidating(ByVal sender As Object, ByVal e As
System.Windows.Forms. DataGridViewCellValidatingEventArgs) Handles
DataGridView1.CellValidating

Dim comboBoxColumn As DataGridViewComboBoxColumn = DataGridView1.Columns(2)

If (e.ColumnIndex = comboBoxColumn.DisplayIndex) Then


If (Not comboBoxColumn.Items.Contains(e.FormattedValue)) Then
comboBoxColumn.Items.Add(e.FormattedValue)
End If
End If
End Sub
430
431 Aqui estou verificando e incluindo o novo item na ComboBox. Para que a inclusão seja
432 possível a propriedade DataSource do coluna DataGridViewComboBoxColumn não pode estar
433 definida; assim não podemos vincular o bindingsource e incluir itens na combobox tendo que
434 usar o código que inclui os dados diretamente na combobox.
435
436
437 Eu poderia estender este artigo, mas são tantos os recursos do DataGridView a explorar que
438 vamos continuar a falar sobre assunto mais adiante... Aguarde.
439 VB.NET 2005 - Agenda com acesso a dados
440

441 Se você esta começando agora a aprender o VB 2005 e tem dúvidas em como criar uma
442 aplicação para acesso a dados que realize as tarefas de incluir, exclui, alterar e listar os
443 dados esta pequena agenda feita no Visual Basic 2005 é exatamente o que você procura:
444 simples , com código sem complicações , realizando as principais tarefas de manutenção (as
445 famosas operações CRUD).

446 Ao estudar esta aplicação você vai aprender a:

447 • Criar um projeto de acesso a dados usando o Microsoft Access;


448 • Criar uma interface com o usuário simples e funcional(Menus de opções com ícones);
449 • Realizar as operações de inclusão, alteração e exclusão de dados;
450 • Trabalhar com exibição de imagens em formulário;
451 • Salvar , remover e exibir as imagens em um banco de dados Access;
452 • Acessar a internet a partir da sua aplicação VB;

453 Vamos usar um banco de dados do Microsoft Access que foi criado com o nome de
454 Agenda.mdb e que possui a tabela Contatos contendo a seguinte estrutura:

455 A aplicação terá apenas dois formulários: o formulário principal que é mostrado abaixo:
456
457 Os namespaces usados na aplicação são:
458
459 Imports System.Data.OleDb
460 Imports System.io
461 Imports System.drawing

462 O banco de dados esta localizado na pasta bin e possui a seguinte definição para a conexão do
463 tipo OledbConnection :

464 Public con As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.jet.OleDB.4.0;Data Source = " &


465 Application.StartupPath & "\Agenda.mdb;")

466 As operações CRUD (Create, Update, Delete) são feitas via comandos SQL :

INSERT INTO Contatos(nome,endereco,fone,celular,email,nascimento,[imagem])VALUES('" &


Incluir tb1.Text & "','" & tb2.Text & "','" & tb3.Text & "','" & tb4.Text & "','" & tb5.Text & "','" &
tb6.Text & "', ?)"
UPDATE Contatos SET nome='" & tb1.Text & "',endereco='" & tb2.Text & "',fone='" & tb3.Text &
Alterar "',celular='" & tb4.Text & "',email='" & tb5.Text & "',nascimento='" & tb6.Text & "',[imagem]=?
WHERE nome='" & tb8.Text & "'"
Excluir DELETE * FROM Contatos WHERE nome = '" & cb1.SelectedItem & "'"

467 O código que faz a chamada a um site da web é o seguinte:

Private Sub wbtn_Click(ByVal sender As System.Object, ByVal


e As System.EventArgs) Handles wbtn.Click

System.Diagnostics.Process.Start("http://www.macoratti.net")
End Sub

468 A cara da projeto em execução para exibição dos dados de um registro é a seguinte :

469 Como estou disponibilizando o código completo creio que já escrevi demais. Baixe os fontes e
470 bom estudo...
471 VB 2005 - Criando uma classe para acesso a dados
472

473 É uma prática recomendável criar uma camada de acesso a dados e encapsular o seu código.
474 Você ganha em produtividade e facilita a manutenção.

475 A seguir apresento algumas sugestões de classes com código de acesso a dados que você pode
476 usar em seus projetos.

477 Abra o Visual Basic 2005 Express e crie um projeto do tipo Windows Application onde serão
478 criadas as classes.

479 No menu Project clique na opção Add Class e na janela Add New Item selecione o template
480 Class informando o nome acessoBD. Será criado o arquivo acessoBD.vb onde podemos criar
481 as nossas classes para acesso a dados. Neste arquivo podemos criar uma ou várias classes.

482 Começamos criando a classe AcessoBD com um construtor vazio e outro construtor onde
483 definimos a string de conexão. O método getConexao retorna a conexão aberta e o método
484 closeConexao fecha a conexão;
Nota: O modelo de configuração de formulário (Configuration Forms) não esta disponível em
projetos Class Library pois não temos um arquivo App.Config para a DLL.

Para ler o arquivo de configuração App.Config em sua aplicação VB 2005 , e exibir o resultado no
console , você pode usar o seguinte código:

Private Shared Sub ShowConfig()

For Each key As String In ConfigurationManager.AppSettings


Dim value As String = ConfigurationManager.AppSettings(key)
Console.WriteLine("Chave: {0}, Value: {1}", key, value)
Next
End Sub

486 Vamos criar a seguir dois métodos sobrecarregados onde poderemos passar o nome de um
487 procedimento armazenado - Stored Procedure - com parâmetros e no outro uma instrução
488 SQL retornando um DataReader:
489 Veremos a seguir um exemplo de como usar as classes acima em um formulário Windows
490 Forms.

491 Aproveitando o mesmo projeto onde criamos a classe AcessoBD inclua no formulário form1.vb
492 um controle ListBox e um botão de comando. No evento Click do botão de comando inclua o
493 seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

'obtem a string de conexão do arquivo de configuração App.Config


Dim strCon = My.Settings.NORTHWNDConnectionString
'cria uma instância da classe AccessBD usando o construtor
'que usa a string de conexao
Dim oDB As New AcessoDB(strCon)
Dim dr As SqlDataReader

'chama o método retornaDataReader passando uma instrução SQL


dr = oDB.retornaDataReader("Select * from Customers")

'percorre o datareader e exibe os dados no listbox


Do While dr.Read
ListBox1.Items.Add(dr(0) & " - " & dr(1))
Loop

End Sub

494 O resultado será o preenchimento do ListBox conforme figura abaixo:

495 Vamos agora criar um método que retorna um DataSet e que recebe o nome da stored
496 procedure , o nome do DataTable a ser preenchido e a coleção de parâmetros:
497 Para usar o exemplo acima irei acessar o banco de dados Northwind.mdf e usar a stored
498 procedure CustOrderHist existente. Esta stored procedure possui o parâmetro @CustomerID
499 que deve ser informado para o método juntamente como valor de retorno desejado. O
500 DataTable retornado irá ser exibido em um controle DataGridView no formulário;
501 Nota: A stored procedure CustOrderHist possui o seguinte código:

502 A seguir inclua o código abaixo no evento Load do formulário:

Private Sub Form2_Load(ByVal sender As Object, ByVal e As


System.EventArgs) Handles Me.Load

'obtem a string de conexão do arquivo de configuração App.Config


Dim strCon = My.Settings.NORTHWNDConnectionString

'cria instância da classe acessoBD


Dim oDados As New AcessoDB(strCon)

'define um dataset
Dim ds As New DataSet

'obtem o dataset passando o nome da Stored Procedure, o parametro e o


valor do parametero (codigo do cliente=ALFKI)
ds = oDados.retornaDataSet("CustOrderHist", "CustOrderHist", New
SqlParameter("@CustomerID", "ALFKI"))

'se há dados preenche o datagridview


If ds.Tables(0).Rows.Count > 0 Then
DataGridView1.DataSource = ds.Tables(0)
Else
MsgBox("Não há dados para este criterio")
End If
End Sub

503 Executando o projeto para a stored procedure CustOrderHist e o cliente ALFKI iremos obter:

504 Note que a classe definida efetua o acesso ao banco de dados SQL Server e que eu não efetuei
505 um tratamento de exceção nas mesmas. Deixo esta tarefa para você (dica: você pode apenas
506 lançar a exceção (throw ex) ). Você pode criar mais métodos ou adaptar os métodos
507 definidos ao seu projeto.
508 VB.NET 2005 - Conectando com objetos de dados
509

510 Este artigo apresenta como criar objetos para gerenciar informações de negócios e em
511 seguida mostra como criar um objeto como fonte de dados para estes objetos. Mostra
512 também como usar TableAdapters para obter dados a partir de um banco de dados e
513 preencher os objetos de dados.

514 O objeto da fonte de dados é criado pela execução do assistente de configuração de fonte de
515 dados selecionando como tipo de dados a opção Object. Depois de completar o assistente as
516 propriedades públicas do objeto estarão disponíveis na janela Data Source para que você
517 possa efetuar a vinculação dos objetos com controles em formulário Windows.

518 As tarefas a serem realizadas neste artigo são as seguintes:

519 • Criar uma novo projeto do tipo Windows Application;


520 • Criar objetos de negócio que vão representar clientes;
521 • Criar e configurar um objeto de fonte de dados na aplicação baseado nos objetos
522 criados acima usando o assistente de configuração de fonte de dados;
523 • Incluir controles em um formulário que serão vinculados aos dados nos objetos
524 definidos;
525 • Criar um dataset com os TableAdapter para mover os dados entre os objetos e o banco
526 de dados;
527 • Preencher os objetos com os dados do banco de dados.

528 Desenhando o cenário para a nossa aplicação:

529 Você possui um banco de dados que contém uma tabela chamada Clientes e deseja criar uma
530 aplicação Windows, usando o VB 2005, para gerenciar os seus dados através da criação de
531 objetos de negócio que representam os Clientes. Deseja também poder exibir em um
532 formulário os dados desta tabela e também preencher os seus objetos de dados com os dados
533 do banco de dados.

534 Nota: Não importa qual seja o seu banco de dados desde que haja um provedor através do
535 qual possamos efetuar uma conexão com ele. Neste artigo eu vou usar o banco de dados
536 Microsoft Access.

537 Na figura abaixo temos a estrutura da tabela Clientes do banco de dados Vendas.mdb :

Obs: A tabela foi criada com apenas 3 campos


para facilitar o entendimento.

538 1- Criando um o projeto Windows

539 Abra o Visual Basic 2005 Express Edition e crie um novo projeto do tipo Windows Application
540 chamado vendasNetObjetos;
541 2- Criando os objetos de Negócio : Clientes e Pedidos

542 Vamos criar agora os objetos de negócio que irão representar as informações da tabela
543 Clientes.

544 No menu Project selecione a opção Add Class;

545 Na janela Add New Item selecione o template Class e informe o nome Clientes.vb clicando a
546 seguir no botão Add;

547 A seguir inclua o seguinte código na classe Clientes:

Public Class Clientes

Public Sub New()


End Sub
Public Sub New(ByVal clienteID As Integer, _
ByVal nome As String, _
ByVal endereco As String)

clienteID_ = clienteID
nome_ = nome
endereco_ = endereco
End Sub

Private clienteID_ As Integer

Public Property clienteID() As Integer


Get
Return clienteID_
End Get
Set(ByVal value As Integer)
clienteID_ = value
End Set
End Property

Private nome_ As String

Public Property nome() As String


Get
Return nome_
End Get
Set(ByVal Value As String)
nome_ = Value
End Set
End Property

Private endereco_ As String

Public Property endereco() As String


Get
Return endereco_
End Get
Set(ByVal Value As String)
endereco_ = Value
End Set
End Property
Public Overrides Function ToString() As String
Return Me.nome & " (" & Me.clienteID & ")"
End Function

End Class

548 A classe Clientes possui como membros os campos definidos na tabela Clientes. Além disso
549 estamos sobrescrevendo a função ToString para poder exibir o nome do cliente seguido do
550 seu código.

551 Neste ponto já temos a classe Clientes.vb pronta. Ela representa os dados da tabela Clientes.

552 Criando um objeto de fonte de dados


553 Podemos criar uma fonte de dados baseada nos objetos criados previamente através do
554 assistente de configuração de Data Source. Vejamos como fazer isso:

555 • Abra a janela Data Sources clicando no menu Data e escolhendo a opção Show Data
556 Sources;

557
558 • Clique no link Add new Data Source;
559 • Na janela Choose a Data Source Type selecione a opção Object e clique em Next;

560

561 • Na janela Select the Object You Wish do Bind To , expanda o nó vendasNetObjetos e
562 selecione a classe Clientes;

563

564 • Clique no Botão Next > ;


565

566 • Finalmente clique no botão Finish e você verá o objeto Clientes na janela Data
567 Sources;

568

569 Criando o formulário para vinculação dos dados


570 Os controles que serão vinculados ao ao objeto Clientes podem ser criados arrastando os
571 items da janela Data Sources no formulário. Desta forma para criar um formulário com
572 controles vinculados as propriedades do objeto Clientes devemos fazer o seguinte:

573 • Na janela Soluction Explorer, selecione Form1 e clique em View Designer;


574 • Arraste e solte o item Clientes a partir da janela Data Source para o formulário Form1;
575

576 Ao final do processo você verá os controles serem criados no formulário bem com o objeto
577 ClientesBindingNavigator para navegação e o objeto ClientesBindingSource para vinculação
578 dos controles com a fonte de dados.

579 Criando um TableAdapter para carregar os dados da tabela


580 no objeto
581 Para mover os dados entre os objetos e o banco de dados vamos usar o recurso
582 TableAdapters. Para criar um TableAdapter para a tabela Clientes vamos usar o assistente de
583 configuração de Data Source;

584 • A partir do menu Data, selecione a opção Add New Data Source;
585 • Selecione a opção DataBase e clique em Next> ;
586 • Na janela para escolher a conexão de dados clique no botão New Connection e na
587 janela Add Connection selecione o Data Source Microsoft Access DataBase File e
588 selecione o caminho onde o banco de dados esta localizado(no nosso caso
589 c:\dados\Vendas.mdb)
590 • Clique no botão Next> ;
591

592 • Salve a string de conexão com o nome padrão VendasConnectionString e clique no


593 botão Next> ;
594 • Selecione a tabela Clientes e clique no botão Finish;

595

596 Neste momento será criado o dataset VendasDataSet e exibido na janela Data Sources
597 contendo a tabela Clientes;
598

599 Vamos agora incluir instâncias dos objetos ClientsTableAdapters e VendasDataSet ao


600 formulário arrastando e soltando estes objetos a partir da ToolBox para o formulário form1.vb
601 conforme a figura abaixo:

602
603 Se executarmos o projeto neste momento qual será o resultado ? Veja abaixo o resultado
604 obtido:

605

606 Como você pode notar embora tenhamos os objetos criados e as instâncias do dataset e do
607 tableAdapter também criados falta mover os dados da tabela clientes para os controles
608 vinculados no formulário. Para isso teremos que criar uma rotina em nosso projeto para
609 carregar os dados nos objetos usando o TableAdapter.

610 Inclua o código abaixo no formulário form1.vb:

Private Sub carregaClientes()

Dim clientesDados As VendasDataSet.ClientesDataTable = ClientesTableAdapter1.GetData


Dim clientesLinha As VendasDataSet.ClientesRow

For Each clientesLinha In clientesDados


Dim clienteAtual As New Clientes()

With clienteAtual
.clienteID = clientesLinha.clienteID
.nome = clientesLinha.Nome
If Not clientesLinha.IsEnderecoNull Then
.endereco = clientesLinha.Endereco
End If
End With
ClientesBindingSource.Add(clienteAtual)
Next

End Sub

611 No código da rotina carregaClientes() criamos um DataTable chamado ClientesDados onde


612 obtemos os dados da tabela Clientes através do método GetData do TableAdapter. Em
613 seguida percorremos o DataTable e atribuímos os valores de cada linha (clientesLinha) ao
614 objeto clienteAtual que é uma instância da classe Clientes. Para finalizar efetuamos a
615 vinculação do objeto via BindingSource para exibir os dados no formulário.

616 Para chamar a rotina criada inclua uma chamada à mesma no evento Load do formulário
617 form1:

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


carregaClientes()
End Sub

618 Agora ao executar o projeto o formulário irá exibir os dados permitindo a navegação pelos
619 registros:
620

621 Eu removi os botões para incluir, excluir e alterar os dados visto que não implementei estas
622 funcionalidades no projeto. Isso fica como um melhoramento que você pode fazer e que em
623 artigos futuros estarei abordando.

624

625
626

Você também pode gostar