3132 Visual Basic
-
Upload
raymond-todd -
Category
Documents
-
view
31 -
download
0
Embed Size (px)
Transcript of 3132 Visual Basic
-
1
2 3 4 5 6 7 8 9 10 11 12
Visual Basic 2005 13 Express Edition 14
15 16 17 18 19 20 21 22 23
Autor: 24 Alexandro Vieira de Souza 25
-
Visual Basic 2005 Express Edition 26 27 28 29 Iniciando um Projeto Ambiente VB 2005 30 31 32
33 34 35 36 Para iniciar um projeto voc deve ir no menu superior do VB 2005, clicar em "File" e escolher a opo 37 "New Project", quando clicar, vai aparecer essa tela, ento voc escolhe a opo "Windows Application", 38 para uma aplicao ao Windows e clica em Ok. 39 40 41 Ambiente de Trabalho Ambiente VB 2005 42 43
44
-
45 46 1 o formulrio onde voc vai criar suas aplicaes, como adicionar botes, imagens, labels, etc. 47 2 Esse menu so as opes da ToolBox, encontrada no menu 3, que ajuda voc adicionar os botes, 48 labels, imagens e vrias outras coisas. 49 3 Menu 2 Superior, responsvel por boa parte do trabalho, que tem as seguintes opes de trabalho : 50 51
- New Project Para voc iniciar um novo projeto, como foi mostrado no inicio da aula. 52 53 - Open File Para abrir algum projeto. 54 55 - Add New Item Para voc adicionar um novo item, por exemplo : Um novo formulrio, um novo 56 banco de dados. 57 58 - Save "Arquivo" Para salvar o projeto que est aberto no momento. 59 60 - Save All Para salvar todos os arquivos que esto abertos nas abas. 61 62 - Cut Recortar algo no formulrio. 63 - Copy Para copiar algo do projeto. 64 65 - Paste Para colar algo que foi copiado. 66 67 - Find Serve para procurar algo no projeto. 68
-
69 - Coment Comentrio para fora as linhas selecionadas. 70 71
- Uncoment (No Conheo) 72 73 - Undo Desfazer algo. 74 75 - Redo Refazer algo. 76 77 -Start Debugging Para voc fazer um teste do projeto, para ver se deu algum debug. 78 79 -Break All Para pausar o teste de projeto. 80 81 -Stop Debugging Para parar o teste de projeto. 82 83 -Step Into Pisar em...(Traduo do Google) 84 85 -Step Over Etapa sobre...(Traduo do Google) 86 87 -Step Out Etapa para fora...(Traduo do Google) 88 89 -Solution Explorer Explora os projetos apresentados. 90 91 -Properties Window Propriedades da Janela. 92 93 -Object Browser Importar algum objeto do browser. 94 95 -ToolBox Caixa de ferramente, para adicionar labels, botes, etc. 96 97 -Error List Mostra a lista dos erros encontrados. 98 99 4 o menu superior onde voc pode, salvar, abrir, iniciar um novo projeto, etc. 100 5 tipo o Windows Explorer, com todas as partes do seu projeto dividida. 101 6 Nesse local, so as propriedades do ferramenta utilizada, onde pode mudar, adicionar imagem, 102 mudar fonte, cor das letras, etc. 103 7 A so as abas, onde ficam guardadas os projetos abertos ao mesmo tempo. 104
-
VB 2005 - Criando um Formulrio de Pedidos com os 105 Assistentes 106
107
Neste artigo eu vou mostrar como voc pode criar um formulrio para efetuar o pedido de 108 venda de um produto em uma aplicao Windows Forms usando somente os assistentes de 109 configurao para Data Source. 110
Suponha que voc tenha que criar um formulrio de pedidos para vendas em uma aplicao 111 Windows Forms usando o VB 2005 Express Edition. 112
O modelo relacional das tabelas usadas pelo sistema o seguinte: 113
Nota: No vou entrar no mrito do modelo nem nos detalhes de criao do banco de dados, 114 das tabelas e dos relacionamentos. importante efetuar a modelagem de forma correta 115 definindo as chaves primrias as chaves estrangeiras e os relacionamentos. 116
A representao do modelo relacional acima, feito para as tabelas usadas neste artigo, foi 117 obtido a partir do diagrama do banco de dados criado na IDE do Visual Basic 2005 Express 118 Edition. Abaixo temos a figura onde exibimos o diagrama criado: 119
-
Alm disso voc ter que criar uma interface que ir usar, como tabelas principais, as tabelas 120 Pedido e Itens, e que dever receber os pedidos dos clientes e discriminar os itens destes 121 pedidos. 122
Para saber mais leia o artigo : VB.NET - Usando DataBase Diagrama 123
Abra o Visual Basic 2005 Express Edition e crie uma nova aplicao Windows Forms com o 124 nome Vendas. 125
Voc dever criar um banco de dados contendo as tabelas com a estrutura acima. No exemplo 126 mostrado neste artigo o banco de dados identificado pelo nome livraria.mdf. 127
Altere o ttulo do formulrio form1.vb para Pedidos. Abaixo voc tem uma viso do projeto 128 no VB 2005. 129
-
Vamos incluir um novo Data Source selecionando a partir do menu Data ou da janela Data 130 Source a opo Add New Data Source... 131
Na janela do Assistente de configurao para Data Source selecione a opo Database pois 132 estaremos efetuando a conexo um banco de dados relacional SQL Server. 133
-
134
Escolha a seguir a conexo com a fonte de dados. Se ela no existir clique no boto New 135 Connection e selecione o tipo da fonte de dados e sua localizao; 136
Em seguida ser apresentada a janela contendo os objetos do banco de dados livraria.mdf, 137 expanda o objeto Tables e selecione as tabelas Itens e Pedido, pois vamos trabalhar somente 138 com essas tabelas e altere o nome do dataset que ser gerado para PedidosDS; 139
-
Na janela DataSource voc ver o DataSet - PedidosDS exibindo as tabelas itens e Pedido. 140 Perceba que a tabela Pedido possui um vinculo com a tabela Itens decorrente do 141 relacionamento feito pela chave pedidoID; 142
A janela Solution Explorer tambm exibe o DataSet onde possvel visualizar o esquema 143 criado com base nas tabelas do banco de dados. 144
-
Na janela Data Sources vamos expandir a tabela Pedido e alterar o modo de exibio de 145 alguns dos seus campos, para isso basta selecionar o campo e escolher a opo desejada a 146 partir do menu; 147
clienteID altere o modo para ComboBox 148 formaPagamentoID altere para o modo ComboBox 149
A seguir vamos definir o modo de visualizao dos campos da tabela como Details. Clique na 150 tabela e selecione este modo a partir do menu; 151
Arraste e solte a tabela no formulrio form1.vb do projeto. Voc dever ver cada campo 152 sendo exibido no formato definido no DataSet; ver tambm a criao dos objetos abaixo na 153 bandeja do formulrio; 154
PedidoDS (dataset) 155 PedidoBindingSource 156 PedidoTableAdapter 157 PedidoBindingNavigator 158
-
Em seguida, ainda na janela Data Sources, selecione a tabela itens que esta vinculada a 159 tabela Pedido conforme a figura (No confunda com a tabela Itens que tambm foi criada no 160 dataset) e altere o modo de exibio para DataGridView 161
Arraste e solte a tabela no mesmo formulrio form1.vb , logo abaixo do local onde os itens da 162 tabela pedido foram exibidos; 163
-
Vamos selecionar o DataGridView criado e clicar na opo Edit Columns; 164
165
Remova o campo PedidoID e selecione a coluna LivroID. Em seguida na propriedade 166 Columntype altere o seu valor para DataGridViewComboBoxColumn e clique em OK; 167
Obs: Para Remover o campo PedidoID selecione o campo e clique no boto Remove. 168
Vamos criar outro Data Source a partir da tabela livros para que possamos usar no formulrio 169 de pedidos. A partir da janela Data Sources ou no menu Data Selecionando a opo Add New 170 Data Source , selecione DataBase, aceite a conexo j criada com o banco de dados 171 livraria.mdf e na janela onde so exibidos as tabelas do banco de dados selecione a tabela 172 Livros informando nome LivrosDS para o dataset a ser criado; 173
-
Vamos repetir o procedimento e criar mais dois novos Data Sources : ClientesDS e 174 PagmentosDS. Iremos usar estes DataSources no formulrio de pedidos logo em seguida. 175
Veremos a seguir como usar os Data Sources criados. Lembra que no formulrio , alteremos o 176 tipo de coluna do campo LivroID no DataGridView para DataGridViewComboBoxColumn. Pois 177 bem, agora na propriedade DataSource vamos indicar o nome LivrosDS referente ao Data 178 Source que acabamos de criar definindo as propriedades DisplayMember como titulo e 179 ValueMember como livroID; 180
-
Vamos agora selecionar a comboBox definida para o campo ClienteID e a partir da janela Data 181 Sources arrastar e soltar a tabela Clientes do data source ClientesDS criado. Em seguida 182 repita o procedimento para a comboBox do campo forma pagamento ID arrastando a tabela 183 Pagamentos do data source PagamentosDS; 184
-
Perceba que na bandeja do formulrio os objetos DataSet, BindingSource e TableAdapter 185 so criados para cada Data Source usado no formulrio. 186
Execute o projeto pressionando F5 e vejamos o resultado: 187
1- Note que no lugar de exibir o cdigo do livro o DataGridView exibe uma coluna contendo 188 os ttulos de cada livro; 189
-
2- A combobox referente a forma de pagamento agora exibe a descrio do pagamento e no 190 o seu cdigo; 191
3- A combobox referente ao campo ClienteID exibe o nome do cliente; 192
-
Nota: Eu poderia ter criado um nico dataset usando todas as tabelas mas resolvi mostrar 193 esta alternativo que pode ser usada se voc pretende usar os data sources criados em mais de 194 um formulrio. 195
E temos ento o formulrio completo pronto para ser usado no cadastramento de pedidos 196 usando um interface amigvel que foi criada sem voc ter que digitar praticamente nenhuma 197 linha de cdigo. 198
Naturalmente faltou espao para falar das validaes e outros recursos que podem ser usados 199 para tornar a aplicao mais robusta e funcional. Essa deixa para voc atuar melhorando o 200 exemplo acima... 201
At o prximo artigo VB.NET... 202
203
Jos Carlos Macoratti 204
-
VB 2005 - Atualizando dados com TableAdapter 205
206
Como atualizar os dados usando o TableAdapter ? 207
Aps voc realizar as alteraes no seu DataSet voc deve enviar os dados para o banco de 208 dados. Lembre-se que um DataSet trabalha no modo desconectado e se voc no enviar as 209 atualizaes para o banco de dados ele no refletir as operaes feitas no DataSet. 210
Se estiver usando um TableAdapter voc deve usar o comando Update deste componente 211 para atualizar as tabelas correspondentes no banco de dados. 212
Os TableAdapters usam comandos de dados para ler e para escrever em uma fonte de dados. O mtodo 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 mtodo Update do TableAdapter.
Desta forma ao chamar o mtodo Update ele executa a instruo criada quando o TableAdapter foi originalmente configurado e no uma das consultas adicionais que podem ter sido criadas com o Assistente de configurao do TableAdapter.
O componente TableAdapter ira executar os comandos : INSERT, UPDATE E DELETE tendo 213 como base os valores obtidos para a propriedade RowState. 214
A propriedade RowState obtm um dos valores da enumerao DataRowState da classe 215 DataRow. Os valores possveis para esta enumerao so: 216
Nome do membro Descrio
Added A linha foi adicionada ao DataRowCollection e o mtodo AcceptChanges no foi chamad
Deleted A linha foi excluda usando o mtodo Delete da DataRow.
Detached A linha foi criada mas no faz parte de qualquer DataRowCollection. A DataRowimediatamente aps ele ter sido criada e para que ela seja adicionada a uma coleremovida de uma coleo.
Modified A linha tenha sido modificada e o mtodo AcceptChanges no foi chamado.
Unchanged A linha no foi alterada desde que o mtodo AcceptChanges foi chamado pela ltima vez.
Estes valores dependem de dois fatores: 217
1. Do tipo de operao que foi realizada na linha; 218 2. Se o mtodo AcceptChanges tiver sido chamado no DataRow; 219
Ao invocar o mtodo AcceptChanges para um DataRow, o mtodo EndEdit implicitamente chamado para encerrar qualquer edio 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 tambm possui um mtodo AcceptChanges o qual afeta as alteraes feitas para a toda a tabela.
O procedimento exato para atualizar uma fonte de dados pode variar dependendo das 220 necessidades do seu negcio mas sua aplicao dever realizar os seguintes passos: 221
-
1. Chamar o mtodo Update do adaptador dentro de um bloco Try/Catch; 222 2. Se uma exceo for capturada, localize a linha de dados que causou o erro; 223 3. Corrija o erro na linha de dados e tente atualizar novamente; 224
Para localizar linhas que possuem erros em seu DataSet faa o seguinte:
Verifique a propriedade HasErrors e veja se existe qualquer erro no seu dataset; Se a propriedade HasErrors for igual a true, ento percorra a coleo 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
Para salvar os dados para o banco de dados chame o mtodo Update do TableAdapter 225 passando o nome da tabela que contm os valores que devero ser escritos no banco de 226 dados. 227
O trecho de cdigo que pode ser usado para realizar tal operao: 228
Try Me.Validate() Me.CustomersBindingSource.EndEdit() Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers) MsgBox("Atualizao realizada com sucesso...") Catch ex As Exception MsgBox("A atualizao falhou...") End Try
- EndEdit - aplica as alteraes pendentes a fonte de dados 229 - Update(NortwhindDataSet.Customers) - envia as alteraes para o banco de dados, informando o dataset e a 230 tabela a ser atualizada;(Existem outros mtodos Updates sobrecarregados onde a assinatura diferente e com 231 isso os parmetros informados podem variar) 232
Atualizando tabelas relacionadas 233
Quando voc precisar atualizar tabelas relacionadas em um dataset importante atualizar as 234 tabelas na sequncia correta a fim de reduzir a chance de gerar um erro relacionado 235 integridade referencial. 236
-
A ordem de execuo do comando tambm seguira os ndices da coleo DataRowCollection 237 no dataset. Para evitar erros relacionados a integridade dos dados ocorram a melhor maneira 238 atualizar o banco de dados usando a seguinte sequncia: 239
1. Tabela filha - deletar os registros; 240 2. Tabela Pai - inserir , atualizar e deletar registros; 241 3. Tabela Filha - inserir e atualizar registros; 242
Um DatarowCollection o componente principal de um objeto DataTable; enquanto que DataColumnCollection define o esquema da tabela , DataRowCollection contm os dados atuais da tabela, onde cada DataRow que compe um DataRowCollection representa uma linha nica (registro).
Se voc esta atualizando duas ou mais tabelas relacionadas dever incluir toda a lgica de 243 atualizao em uma transao. Uma transao um processo que assegura que todas as 244 mudanas relacionadas feitas no banco de dados tenham sido completadas com sucesso antes 245 de confirmar, atravs do comando commit, qualquer mudana. 246
Transaes so grupos de operaes combinadas em uma unidade lgica de trabalho. Elas so usadas para controlar e manter a consistncia e integridade de cada ao na transao, a despeito dos erros que possam ocorrer no sistema.
Para saber mais sobre transaes veja o artigo : 247
ADO.NET - Usando Transaes 248 ADO - Usando Transaes - BeginTrans, CommitTrans e RollBack. 249 O Processamento de Transaes: BeginTrans, CommitTrans e RollBack. 250
A seguir temos um exemplo de realizao de tal operao. As etapas a serem cumpridas so : 251
1. Crie trs tabelas temporrias para tratar os registros diferentes; 252 2. Chame o mtodo Update para cada subconjunto de linhas usando um bloco try/catch. 253
Se ocorrem erros, verifique e corrija; 254 3. Confirme as alteraes para o banco de dados (Commit); 255 4. Libere os recursos alocados quando da criao das tabelas temporrias; 256
O exemplo abaixo trata com as tabelas Orders e Customers. Essas tabelas possui um 257 relacionamento mostrado a seguir: 258
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 alteraes no banco de dados NorthwindDataSet.AcceptChanges() Catch ex As Exception MessageBox.Show("Ocorreu um erro durante o processo de atualizao") 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
Com isso temos um panorama geral sobre como atualizar dados usando um TableAdapter. 260
Alm das instrues InsertCommand, UpdateCommand, and DeleteCommand, o componente 261 criado com mtodos que podem ser executados diretamente no banco de dados. Estes 262 mtodos podem ser chamados diretamente para manipular dados. Os mtodos so: 263 TableAdapter.Insert, TableAdapter.Update, e TableAdapter.Delete. 264
-
VB 2005 - Manipulando o DataGridView 265
266
O DataGridView um controle com 1001 utilidades, flexvel e poderoso se comparados com 267 controles grids das verses anteriores do VB (lembra do DBGrid, MSFlexGrid, DataGrid, etc...) 268
269
Embora no seja complicado de usar como toda novidade desperta curiosidade e dvidas, e, 270 por este motivo este artigo procurar mostrar as maneiras mais comuns e teis de usar o 271 controle DataGridView. 272
Para comear voc vai ter que ter instalado os seguintes recursos: 273
Visual Basic 2005 Express Edition (Aproveite grtis) 274
O primeiro passo e abrir o VB 2005 Express e criar uma aplicao Windows Forms via opo 275 File->New Project com o nome de datagridViewTotal 276
Aqui o ponto de partida para a nossa jornada, vamos l... 277
Usando DataGridView com Arrays 278
Vamos definir um array chamado vetor com dois elementos e vincular o array ao 279 DataGridView usando a propriedade DataSource: 280
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
Opa ! mas o que aconteceu ??? O resultado no o esperado. Por que ? 281
Voc esperava que os elementos do array fossem exibidos mas somente o tamanho de cada 282 elemento foi exibido. 283
O motivo deste comportamento que o DataGridView procura pela primeira propriedade 284 pblica do objeto ao qual esta vinculado e a primeira propriedade pblica de um array de 285 strings o tamanho de cada elemento contido no array. 286
Para fazer da maneira correta devemos envolver o array de string em uma classe que exponha 287 propriedades pblicas que retornem o contedo de cada um dos elementos que desejamos 288 exibir. 289
Podemos fazer isso criando uma classe e definindo um construtor e uma propriedade pblica 290 para ter acesso ao valor de cada elemento do vetor: 291
No menu Project -> Add Class selecione o template Class e informe o nome vetor.vb para o 292 nome da classe a seguir inclua o seguinte cdigo na classe: 293
Voltando ao formulrio form1.vb e alterando o cdigo para usar a classe criada temos: 294
-
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
Da mesma forma podemos vincular o controle DataGridView a um objeto mais complexo. 295
Usando DataGridView com DataSets Tipados 296
Um uso muito comum do controle DataGridView a vinculao a uma tabela de um banco de 297 dados. Podemos efetuar esta tarefa usando um DataSet tipado. 298
Vamos incluir um dataset tipado ao projeto clicando sobre o nome do projeto com o boto 299 direito do mouse e seleciona a opo Add New Item. Na janela selecione o template DataSet 300 e clique Add; 301
Habilite o DataBase Explorer no menu View e localize o banco de dados Northwind.mdf , 302 expanda o objeto Tables e em seguida arraste e solte a tabela Customers no descrito 303 DataSet1.xsd conforme a figura abaixo: 304
-
No prximo passo vamos vincular o dataset ao DataGridView e podemos fazer isto das 305 seguintes formas: 306
1- Vincular o DataGridView diretamente ao adapter da tabela Customers: 307
Inclua o projeto a seguinte declarao : 308
Imports dataGridViewTotal.DataSet1TableAdapters 309
A seguir inclua um boto de comando no formulrio e inclua o cdigo abaixo no evento Click 310 do boto: 311
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'cria uma instncia da TableAdapter Dim da As New CustomersTableAdapter 'vincula o TableAdapter ao DataGridView DataGridView1.DataSource = da.GetData End Sub
Executando o projeto temos: 312
-
2- Vinculando o DataGridView a um BindginSource 313
Para este exemplo voc deve criar um TableAdapter para a tabela Customers. Para fazer isso 314 inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a tabela 315 Customers do banco de dados Northwind.mdb. 316
A seguir Inclua no projeto a seguinte declarao (se ainda no o fez) : 317
Imports dataGridViewTotal.DataSet1TableAdapters 318
Agora insira um novo boto de comando e no evento Click do boto insira o cdigo: 319
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'cria uma instncia da TableAdapter Dim da As New CustomersTableAdapter 'cria uma instncia de um BindingSource Dim bindsrc As New BindingSource 'define a fonte de dados para o bindingsource e obtm os dados do mtodo GetData do TableAdapter bindsrc.DataSource = da.GetData 'vincula o BindingSource ao DataGridView DataGridView1.DataSource = bindsrc End Sub
Usando o DataGridView com DataSets no tipados 320
Voc tambm pode definir o dataset via cdigo vinculando em seguida o componente ao 321 DataGridView. 322
Primeiro temos que criar e preencher um dataset para em seguida atribuir propriedade 323 DataSource do DataGridView o dataset gerado. 324
No cdigo estou atribuindo propriedade DataMember a tabela gerada no dataset. Uma 325 outra maneira de obter o mesmo resultado seria atribuir diretamente a propriedade 326 DataSource a tabela gerada que no caso seria a primeira tabela (pois s temos uma) : 327 ds.tables(0). Neste caso no necessitaramos de definir o Datamember. 328
-
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 instruo 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
Obtendo o valor da clula selecionada e Atribuindo a clula 329 atual 330
Para obter o valor da clula clicada pelo usurio em um DataGridView usamos o evento 331 CellEnter: 332
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
'---Quando o usurio clicar no controle , exibe o conteudo da clula MsgBox(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)
End Sub
Neste cdigo estamos obtendo o valor da clula pelo ndice da linha (e.RowIndex) e da coluna 333 (e.ColumnIndex). 334
Se desejar obter valor da primeira coluna quando o usurio selecionar uma linha o cdigo 335 ficaria assim : 336
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
'---Quando o usurio clicar no controle , exibe o conteudo da clula referente a primeira coluna (Column=0) MsgBox(DataGridView1.Rows(e.RowIndex).Cells(0).Value)
End Sub
-
Para atribuir a clula atual via cdigo podemos atribuir um valor a propriedade CurrentCell 338 do DataGridView . No cdigo abaixo estou atribuindo a clula atual como sendo a primeira 339 linha e a segunda coluna ( row=0 e column=1) 340
Private Sub setCurrentCellButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles setCurrentCellButton.Click ' Define a clula atual para a clula na coluna 1 e linha 0 Me.dataGridView1.CurrentCell = Me.dataGridView1(1, 0) End Sub
Validando a entrada de dados em uma clula 341
Podemos usar o evento CellValidating para verificar se a entrada de um usurio quando da 342 edio dos dados de uma clula estiver ocorrendo valida ou no. 343
No exemplo acima iremos efetuar a validao da coluna CompanyName para isso devemos 344 implementar o tratamento dos eventos CellValidating e CellEndEdits. 345
O evento CellValidating ocorre quando a clula perde o foco de entrada habilitando a 346 validao do seu contedo. 347
O evento CellEndEdits ocorre quando o modo de edio encerrado para a atual clula 348 selecionada. 349
No evento CellValidating onde voc determina se o valor de uma clula para um 350 determinada coluna vlida. Se a validao da clula falha defina a propriedade Cancel da 351 classe System.Windows.Forms.DataGridViewCellValidatingEventArgs para true. Isto faz com 352 que o controle DataGridView no permita que o cursor deixe a clula. 353
Definindo a propriedade ErrorText na linha para exibir uma mensagem para o usurio exibe 354 um cone de erro com uma dica que contm o texto para o erro. 355
-
No evento CellEndEdit defina a propriedade ErrorText na linha para uma string vazia. Este 356 evento ocorre somente quando a clula existe no modo edit o qual no pode ocorrer se a 357 validao falhar. 358
No exemplo vamos verificar se a coluna CompanyName esta vazia para a entrada do usurio: 359
Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
' Valida o entrada para o CompanyName no 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 no 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 usurio pressionar ESC DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty End Sub
Tratando ocorrncias de erros em um DataGridView 360
Podemos efetuar o tratamento de erros para o controle DataGridView usando o evento 361 DataError o qual disparado quando a fonte de dados detecta uma violao de restrio ou 362 quebra de regra de negcio. 363
A seguir temos um exemplo que quando ocorrer um valor para o campo CustomerID duplicado 364 em uma nova linha ou linha sendo editada o evento DataError ir ocorrer e ser tratado pela 365 exibio de uma mensagem que descreve o erro. 366
Private Sub dataGridView1_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
' Se a fonte de dados levanta uma exceo quando uma clula esta comitda
-
exibe um erro. If e.Exception IsNot Nothing AndAlso e.Context = DataGridViewDataErrorContexts.Commit Then MessageBox.Show("O cdigo do cliente - CustomerID - no pode ser duplicado.") End If
End Sub
Exibindo imagens em clulas de um DataGridView 367
Podemos exibir uma figura ou um grfico em uma linha de dados. Para exibir imagens em um 368 controle DataGridView no h muito segredo pois ele trata nativamente qualquer imagem 369 suportada pela classe Image bem como o ormato de imagem OLE usado por alguns banco de 370 dados. 371
Se a fonte de dados do controle DataGridView possuir uma coluna com imagens , elas sero 372 exibida automaticamente exibidas no controle DataGridView. 373
Filtrando e ordenando colunas via cdigo 374
Para filtrar os dados exibidos em um DataGridView podemos usar um objeto DataView. A 375 seguir temos um exemplo onde estamos filtrando os dados para o cdigo do cliente iniciado 376 pela letra B: 377
Nota: Para este exemplo voc deve criar um TableAdapter para a tabela Customers. Para 378 fazer isso inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a 379 tabela Customers do banco de dados Northwind.mdb. 380
Voc dever declarar os seguintes namespaces no projeto para que o cdigo abaixo funcione: 381
Imports System.Data.sqlclient 382 Imports datagridviewTotal.DataSet1TableAdapters 383
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'---crria uma instncia de um tableadapter --- Dim adapter As New CustomersTableAdapter '---cria uma instncia de um dataview--- Dim dv As New DataView(adapter.GetData) 'filtra usando o criterio escolhido: clientes com cdigo contendo B no incio 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 O resultado da execuo deste cdigo ser: 384
-
385 O dataView obtido a partir do adapter chamando o mtodo getData que retorna um DataTable preenchido 386 conforme a consulta SQL definida. 387
No cdigo acima o objeto DataView permite aos usurio incluir novas linhas , via propriedade AllowNew no 388 controle DataGridView e tambm excluir linhas , via propriedade AllowDelete. 389
Podemos ainda ordenar as linhas especificando o campo e a ordem correspondente que ser aplicada usando a 390 propriedade Sort. (ASC ordem ascendente DESC ordem descendente) 391
O filtro feito pela expresso SQL usando a expresso LIKE via propriedade RowFilter. 392
Uma outra maneira de ordenar colunas usar o mtodo Sort do prprio controle DataGridView: 393
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
O cdigo esta ordenando pela primeira coluna do componente (Columns(0)) usando a ordem 394 descendente. 395
Definindo um texto em ToolTips em clulas individuais 396
De forma geral usamos o recurso ToolTips para exibir valores em clulas do DataGridView que 397 so muito pequenas para exibir todo o contedo. Podemos reescrever este comportamento de 398 forma a definir textos para ToolTips para clulas individuais. Isto til para exibir informao 399 adicional sobre a clula ou para fornecer ao usurio uma descrio mais detalhada sobre o 400 contedo da clula. 401
Para isto eu vou usar o o evento CellFormatting que ocorre quando o contedo de uma clula 402 precisa ser formatado para exibio. 403
A tabela Customers no possui um campo muito adequado para um exemplo mais convincente 404 ,vou usar portanto o campo City de e escolher algumas cidades de forma que exibam o nome 405 do pais a qual pertenam. O cdigo o seguinte: 406
'Define o texto da propriedade ToolTip para clulas 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
O resultado pode ser visto na figura abaixo: 407
-
Exibindo uma combobox em uma clula 408
Voc pode exibir uma combobox em uma clula de forma a permitir que o usurio selecione 409 valores determinados de uma lista existente. Neste caso voc precisa incluir uma ComboBox 410 na clula da coluna desejada. O cdigo abaixo faz exatamente isto usando o controle 411 BindingSource: 412
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("Matemtica") bindingsource.Add("Portugus") bindingsource.Add("Histria") '---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
Se voc no quiser usar um controle BindingSource pode incluir os itens diretamente no 413 controle DataGridViewComboBoxColumn : 414
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("Matemtica") comboBoxCol.Items.Add("Portugus") comboBoxCol.Items.Add("Histria") '---Inclui a coluna combobox ao DataGridView--- DataGridView1.Columns.Add(comboBoxCol) End Sub 415 Se voc deseja permitir que os usurios possam incluir novos valores no controle ComboBox. 416 Neste caso voc ter que fazer o seguinte : 417 418 1-) Usar o evento EditingControlShowing que ocorre quando o usurio vai tentar editar dados 419 no controle Combobox: 420 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 Neste cdigo estou verificando se a clula que esta sendo editada do tipo ComboBox. Neste 423 caso estou definindo o estilo do ComboBox como DropDown de forma que o usurio possa 424 digitar o novo item a ser includo. 425 426 2-) Usar o evento CellValidating do controle DataGridView que ocorre sempre que o usurio 427 termina de digitar e deixa a clula: 428 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 Aqui estou verificando e incluindo o novo item na ComboBox. Para que a incluso seja 431 possvel a propriedade DataSource do coluna DataGridViewComboBoxColumn no pode estar 432 definida; assim no podemos vincular o bindingsource e incluir itens na combobox tendo que 433 usar o cdigo que inclui os dados diretamente na combobox. 434 435
-
436 Eu poderia estender este artigo, mas so tantos os recursos do DataGridView a explorar que 437 vamos continuar a falar sobre assunto mais adiante... Aguarde. 438
-
VB.NET 2005 - Agenda com acesso a dados 439
440
Se voc esta comeando agora a aprender o VB 2005 e tem dvidas em como criar uma 441 aplicao para acesso a dados que realize as tarefas de incluir, exclui, alterar e listar os 442 dados esta pequena agenda feita no Visual Basic 2005 exatamente o que voc procura: 443 simples , com cdigo sem complicaes , realizando as principais tarefas de manuteno (as 444 famosas operaes CRUD). 445
Ao estudar esta aplicao voc vai aprender a: 446
Criar um projeto de acesso a dados usando o Microsoft Access; 447 Criar uma interface com o usurio simples e funcional(Menus de opes com cones); 448 Realizar as operaes de incluso, alterao e excluso de dados; 449 Trabalhar com exibio de imagens em formulrio; 450 Salvar , remover e exibir as imagens em um banco de dados Access; 451 Acessar a internet a partir da sua aplicao VB; 452
Vamos usar um banco de dados do Microsoft Access que foi criado com o nome de 453 Agenda.mdb e que possui a tabela Contatos contendo a seguinte estrutura: 454
A aplicao ter apenas dois formulrios: o formulrio principal que mostrado abaixo: 455
-
456 Os namespaces usados na aplicao so: 457 458 Imports System.Data.OleDb 459 Imports System.io 460 Imports System.drawing 461
O banco de dados esta localizado na pasta bin e possui a seguinte definio para a conexo do 462 tipo OledbConnection : 463
Public con As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.jet.OleDB.4.0;Data Source = " & 464 Application.StartupPath & "\Agenda.mdb;") 465
As operaes CRUD (Create, Update, Delete) so feitas via comandos SQL : 466
Incluir INSERT INTO Contatos(nome,endereco,fone,celular,email,nascimento,[imagem])VALUES('" & tb1.Text & "','" & tb2.Text & "','" & tb3.Text & "','" & tb4.Text & "','" & tb5.Text & "','" & tb6.Text & "', ?)"
Alterar UPDATE Contatos SET nome='" & tb1.Text & "',endereco='" & tb2.Text & "',fone='" & tb3.Text & "',celular='" & tb4.Text & "',email='" & tb5.Text & "',nascimento='" & tb6.Text & "',[imagem]=? WHERE nome='" & tb8.Text & "'"
Excluir DELETE * FROM Contatos WHERE nome = '" & cb1.SelectedItem & "'"
O cdigo que faz a chamada a um site da web o seguinte: 467
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
A cara da projeto em execuo para exibio dos dados de um registro a seguinte : 468
Como estou disponibilizando o cdigo completo creio que j escrevi demais. Baixe os fontes e 469 bom estudo... 470
-
VB 2005 - Criando uma classe para acesso a dados 471
472
uma prtica recomendvel criar uma camada de acesso a dados e encapsular o seu cdigo. 473 Voc ganha em produtividade e facilita a manuteno. 474
A seguir apresento algumas sugestes de classes com cdigo de acesso a dados que voc pode 475 usar em seus projetos. 476
Abra o Visual Basic 2005 Express e crie um projeto do tipo Windows Application onde sero 477 criadas as classes. 478
No menu Project clique na opo Add Class e na janela Add New Item selecione o template 479 Class informando o nome acessoBD. Ser criado o arquivo acessoBD.vb onde podemos criar 480 as nossas classes para acesso a dados. Neste arquivo podemos criar uma ou vrias classes. 481
Comeamos criando a classe AcessoBD com um construtor vazio e outro construtor onde 482 definimos a string de conexo. O mtodo getConexao retorna a conexo aberta e o mtodo 483 closeConexao fecha a conexo; 484
-
Nota: O modelo de configurao de formulrio (Configuration Forms) no esta disponvel em projetos Class Library pois no temos um arquivo App.Config para a DLL.
Para ler o arquivo de configurao App.Config em sua aplicao VB 2005 , e exibir o resultado no console , voc pode usar o seguinte cdigo:
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
Vamos criar a seguir dois mtodos sobrecarregados onde poderemos passar o nome de um 486 procedimento armazenado - Stored Procedure - com parmetros e no outro uma instruo 487 SQL retornando um DataReader: 488
-
Veremos a seguir um exemplo de como usar as classes acima em um formulrio Windows 489 Forms. 490
Aproveitando o mesmo projeto onde criamos a classe AcessoBD inclua no formulrio form1.vb 491 um controle ListBox e um boto de comando. No evento Click do boto de comando inclua o 492 seguinte cdigo: 493
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'obtem a string de conexo do arquivo de configurao App.Config Dim strCon = My.Settings.NORTHWNDConnectionString
-
'cria uma instncia da classe AccessBD usando o construtor 'que usa a string de conexao Dim oDB As New AcessoDB(strCon) Dim dr As SqlDataReader 'chama o mtodo retornaDataReader passando uma instruo 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
O resultado ser o preenchimento do ListBox conforme figura abaixo: 494
Vamos agora criar um mtodo que retorna um DataSet e que recebe o nome da stored 495 procedure , o nome do DataTable a ser preenchido e a coleo de parmetros: 496
-
Para usar o exemplo acima irei acessar o banco de dados Northwind.mdf e usar a stored 497 procedure CustOrderHist existente. Esta stored procedure possui o parmetro @CustomerID 498 que deve ser informado para o mtodo juntamente como valor de retorno desejado. O 499 DataTable retornado ir ser exibido em um controle DataGridView no formulrio; 500
-
Nota: A stored procedure CustOrderHist possui o seguinte cdigo: 501
A seguir inclua o cdigo abaixo no evento Load do formulrio: 502
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'obtem a string de conexo do arquivo de configurao App.Config Dim strCon = My.Settings.NORTHWNDConnectionString 'cria instncia 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("No h dados para este criterio") End If End Sub
Executando o projeto para a stored procedure CustOrderHist e o cliente ALFKI iremos obter: 503
Note que a classe definida efetua o acesso ao banco de dados SQL Server e que eu no efetuei 504 um tratamento de exceo nas mesmas. Deixo esta tarefa para voc (dica: voc pode apenas 505 lanar a exceo (throw ex) ). Voc pode criar mais mtodos ou adaptar os mtodos 506 definidos ao seu projeto. 507
-
VB.NET 2005 - Conectando com objetos de dados 508
509
Este artigo apresenta como criar objetos para gerenciar informaes de negcios e em 510 seguida mostra como criar um objeto como fonte de dados para estes objetos. Mostra 511 tambm como usar TableAdapters para obter dados a partir de um banco de dados e 512 preencher os objetos de dados. 513
O objeto da fonte de dados criado pela execuo do assistente de configurao de fonte de 514 dados selecionando como tipo de dados a opo Object. Depois de completar o assistente as 515 propriedades pblicas do objeto estaro disponveis na janela Data Source para que voc 516 possa efetuar a vinculao dos objetos com controles em formulrio Windows. 517
As tarefas a serem realizadas neste artigo so as seguintes: 518
Criar uma novo projeto do tipo Windows Application; 519 Criar objetos de negcio que vo representar clientes; 520 Criar e configurar um objeto de fonte de dados na aplicao baseado nos objetos 521
criados acima usando o assistente de configurao de fonte de dados; 522 Incluir controles em um formulrio que sero vinculados aos dados nos objetos 523
definidos; 524 Criar um dataset com os TableAdapter para mover os dados entre os objetos e o banco 525
de dados; 526 Preencher os objetos com os dados do banco de dados. 527
Desenhando o cenrio para a nossa aplicao: 528
Voc possui um banco de dados que contm uma tabela chamada Clientes e deseja criar uma 529 aplicao Windows, usando o VB 2005, para gerenciar os seus dados atravs da criao de 530 objetos de negcio que representam os Clientes. Deseja tambm poder exibir em um 531 formulrio os dados desta tabela e tambm preencher os seus objetos de dados com os dados 532 do banco de dados. 533
Nota: No importa qual seja o seu banco de dados desde que haja um provedor atravs do 534 qual possamos efetuar uma conexo com ele. Neste artigo eu vou usar o banco de dados 535 Microsoft Access. 536
Na figura abaixo temos a estrutura da tabela Clientes do banco de dados Vendas.mdb : 537
Obs: A tabela foi criada com apenas 3 campos para facilitar o entendimento.
1- Criando um o projeto Windows 538
Abra o Visual Basic 2005 Express Edition e crie um novo projeto do tipo Windows Application 539 chamado vendasNetObjetos; 540
-
2- Criando os objetos de Negcio : Clientes e Pedidos 541
Vamos criar agora os objetos de negcio que iro representar as informaes da tabela 542 Clientes. 543
No menu Project selecione a opo Add Class; 544
Na janela Add New Item selecione o template Class e informe o nome Clientes.vb clicando a 545 seguir no boto Add; 546
A seguir inclua o seguinte cdigo na classe Clientes: 547
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
A classe Clientes possui como membros os campos definidos na tabela Clientes. Alm disso 548 estamos sobrescrevendo a funo ToString para poder exibir o nome do cliente seguido do 549 seu cdigo. 550
Neste ponto j temos a classe Clientes.vb pronta. Ela representa os dados da tabela Clientes. 551
Criando um objeto de fonte de dados 552
Podemos criar uma fonte de dados baseada nos objetos criados previamente atravs do 553 assistente de configurao de Data Source. Vejamos como fazer isso: 554
Abra a janela Data Sources clicando no menu Data e escolhendo a opo Show Data 555 Sources; 556
557
-
Clique no link Add new Data Source; 558 Na janela Choose a Data Source Type selecione a opo Object e clique em Next; 559
560
Na janela Select the Object You Wish do Bind To , expanda o n vendasNetObjetos e 561 selecione a classe Clientes; 562
563
Clique no Boto Next > ; 564
-
565
Finalmente clique no boto Finish e voc ver o objeto Clientes na janela Data 566 Sources; 567
568
Criando o formulrio para vinculao dos dados 569
Os controles que sero vinculados ao ao objeto Clientes podem ser criados arrastando os 570 items da janela Data Sources no formulrio. Desta forma para criar um formulrio com 571 controles vinculados as propriedades do objeto Clientes devemos fazer o seguinte: 572
Na janela Soluction Explorer, selecione Form1 e clique em View Designer; 573 Arraste e solte o item Clientes a partir da janela Data Source para o formulrio Form1; 574
-
575
Ao final do processo voc ver os controles serem criados no formulrio bem com o objeto 576 ClientesBindingNavigator para navegao e o objeto ClientesBindingSource para vinculao 577 dos controles com a fonte de dados. 578
Criando um TableAdapter para carregar os dados da tabela 579 no objeto 580
Para mover os dados entre os objetos e o banco de dados vamos usar o recurso 581 TableAdapters. Para criar um TableAdapter para a tabela Clientes vamos usar o assistente de 582 configurao de Data Source; 583
A partir do menu Data, selecione a opo Add New Data Source; 584 Selecione a opo DataBase e clique em Next> ; 585 Na janela para escolher a conexo de dados clique no boto New Connection e na 586
janela Add Connection selecione o Data Source Microsoft Access DataBase File e 587 selecione o caminho onde o banco de dados esta localizado(no nosso caso 588 c:\dados\Vendas.mdb) 589
Clique no boto Next> ; 590
-
591
Salve a string de conexo com o nome padro VendasConnectionString e clique no 592 boto Next> ; 593
Selecione a tabela Clientes e clique no boto Finish; 594
595
Neste momento ser criado o dataset VendasDataSet e exibido na janela Data Sources 596 contendo a tabela Clientes; 597
-
598
Vamos agora incluir instncias dos objetos ClientsTableAdapters e VendasDataSet ao 599 formulrio arrastando e soltando estes objetos a partir da ToolBox para o formulrio form1.vb 600 conforme a figura abaixo: 601
602
-
Se executarmos o projeto neste momento qual ser o resultado ? Veja abaixo o resultado 603 obtido: 604
605
Como voc pode notar embora tenhamos os objetos criados e as instncias do dataset e do 606 tableAdapter tambm criados falta mover os dados da tabela clientes para os controles 607 vinculados no formulrio. Para isso teremos que criar uma rotina em nosso projeto para 608 carregar os dados nos objetos usando o TableAdapter. 609
Inclua o cdigo abaixo no formulrio form1.vb: 610
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
No cdigo da rotina carregaClientes() criamos um DataTable chamado ClientesDados onde 611 obtemos os dados da tabela Clientes atravs do mtodo GetData do TableAdapter. Em 612 seguida percorremos o DataTable e atribumos os valores de cada linha (clientesLinha) ao 613 objeto clienteAtual que uma instncia da classe Clientes. Para finalizar efetuamos a 614 vinculao do objeto via BindingSource para exibir os dados no formulrio. 615
Para chamar a rotina criada inclua uma chamada mesma no evento Load do formulrio 616 form1: 617
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load carregaClientes() End Sub
Agora ao executar o projeto o formulrio ir exibir os dados permitindo a navegao pelos 618 registros: 619
-
620
Eu removi os botes para incluir, excluir e alterar os dados visto que no implementei estas 621 funcionalidades no projeto. Isso fica como um melhoramento que voc pode fazer e que em 622 artigos futuros estarei abordando. 623
624
625 626