1

2 3 4 5 6 7 8 9 10 11 12

13

14 15 16 17 18 19 20 21 22 23 24 25

Visual Basic 2005 Express Edition

Autor: Alexandro Vieira de Souza

26 27 28 29 30 31 32

• Visual Basic 2005 Express Edition

Iniciando um Projeto – Ambiente VB 2005

33 34 35 36 37 38 39 40 41 42 43 44

Para iniciar um projeto você deve ir no menu superior do VB 2005, clicar em "File" e escolher a opção "New Project", quando clicar, vai aparecer essa tela, então você escolhe a opção "Windows Application", para uma aplicação ao Windows e clica em Ok.

Ambiente de Trabalho – Ambiente VB 2005

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

• 1 – È o formulário onde você vai criar suas aplicações, como adicionar botões, imagens, labels, etc. • 2 – Esse menu são as opções da ToolBox, encontrada no menu 3, que ajuda você á adicionar os botões, labels, imagens e várias outras coisas. • 3 – Menu 2 Superior, é responsável por boa parte do trabalho, que tem as seguintes opções de trabalho : -• -• New Project – Para você iniciar um novo projeto, como foi mostrado no inicio da aula. Open File – Para abrir algum projeto.

-• Add New Item – Para você adicionar um novo item, por exemplo : Um novo formulário, um novo banco de dados. -• -• -• -• -• -• Save "Arquivo" – Para salvar o projeto que está aberto no momento. Save All – Para salvar todos os arquivos que estão abertos nas abas. Cut – Recortar algo no formulário. Copy – Para copiar algo do projeto. Paste – Para colar algo que foi copiado. Find – Serve para procurar algo no projeto.

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 -• -• -• -• Coment – Comentário para fora as linhas selecionadas. Uncoment – (Não Conheço) Undo – Desfazer algo. Redo – Refazer algo.

-•Start Debugging – Para você fazer um teste do projeto, para ver se deu algum debug. -•Break All – Para pausar o teste de projeto. -•Stop Debugging – Para parar o teste de projeto. -•Step Into – Pisar em...(Tradução do Google) -•Step Over – Etapa sobre...(Tradução do Google) -•Step Out – Etapa para fora...(Tradução do Google) -•Solution Explorer – Explora os projetos apresentados. -•Properties Window – Propriedades da Janela. -•Object Browser – Importar algum objeto do browser. -•ToolBox – Caixa de ferramente, para adicionar labels, botões, etc. -•Error List – Mostra a lista dos erros encontrados. • 4 – È o menu superior onde você pode, salvar, abrir, iniciar um novo projeto, etc. • 5 – È tipo o Windows Explorer, com todas as partes do seu projeto dividida. • 6 – Nesse local, são as propriedades do ferramenta utilizada, onde pode mudar, adicionar imagem, mudar fonte, cor das letras, etc. • 7 – Aí são as abas, onde ficam guardadas os projetos abertos ao mesmo tempo.

105 106 107 108 109 110 111 112 113

VB 2005 - Criando um Formulário de Pedidos com os Assistentes
Neste artigo eu vou mostrar como você pode criar um formulário para efetuar o pedido de venda de um produto em uma aplicação Windows Forms usando somente os assistentes de configuração para Data Source. Suponha que você tenha que criar um formulário de pedidos para vendas em uma aplicação Windows Forms usando o VB 2005 Express Edition. O modelo relacional das tabelas usadas pelo sistema é o seguinte:

114 115 116 117 118 119

Nota: Não vou entrar no mérito do modelo nem nos detalhes de criação do banco de dados, das tabelas e dos relacionamentos. É importante efetuar a modelagem de forma correta definindo as chaves primárias as chaves estrangeiras e os relacionamentos. A representação do modelo relacional acima, feito para as tabelas usadas neste artigo, foi obtido a partir do diagrama do banco de dados criado na IDE do Visual Basic 2005 Express Edition. Abaixo temos a figura onde exibimos o diagrama criado:

120 121 122 123 124 125 126 127 128 129

Além disso você terá que criar uma interface que irá usar, como tabelas principais, as tabelas Pedido e Itens, e que deverá receber os pedidos dos clientes e discriminar os itens destes pedidos. Para saber mais leia o artigo : VB.NET - Usando DataBase Diagrama Abra o Visual Basic 2005 Express Edition e crie uma nova aplicação Windows Forms com o nome Vendas. Você deverá criar um banco de dados contendo as tabelas com a estrutura acima. No exemplo mostrado neste artigo o banco de dados é identificado pelo nome livraria.mdf. Altere o título do formulário form1.vb para Pedidos. Abaixo você tem uma visão do projeto no VB 2005.

130 131

Vamos incluir um novo Data Source selecionando a partir do menu Data ou da janela Data Source a opção Add New Data Source...

132 133

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

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

137 138 139

Em seguida será apresentada a janela contendo os objetos do banco de dados livraria.mdf, expanda o objeto Tables e selecione as tabelas Itens e Pedido, pois vamos trabalhar somente com essas tabelas e altere o nome do dataset que será gerado para PedidosDS;

140 141 142 143 144

Na janela DataSource você verá o DataSet - PedidosDS exibindo as tabelas itens e Pedido. Perceba que a tabela Pedido possui um vinculo com a tabela Itens decorrente do relacionamento feito pela chave pedidoID; A janela Solution Explorer também exibe o DataSet onde é possível visualizar o esquema criado com base nas tabelas do banco de dados.

145 146 147 148 149

Na janela Data Sources vamos expandir a tabela Pedido e alterar o modo de exibição de alguns dos seus campos, para isso basta selecionar o campo e escolher a opção desejada a partir do menu;
• •

clienteID altere o modo para ComboBox formaPagamentoID altere para o modo ComboBox

150 151

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

152 153 154 155 156 157 158

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

PedidoDS (dataset) PedidoBindingSource PedidoTableAdapter PedidoBindingNavigator

159 160 161

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

162 163

Arraste e solte a tabela no mesmo formulário form1.vb , logo abaixo do local onde os itens da tabela pedido foram exibidos;

164

Vamos selecionar o DataGridView criado e clicar na opção Edit Columns;

165 166 167 Remova o campo PedidoID e selecione a coluna LivroID. Em seguida na propriedade Columntype altere o seu valor para DataGridViewComboBoxColumn e clique em OK;

168 169 170 171 172 173

Obs: Para Remover o campo PedidoID selecione o campo e clique no botão Remove. Vamos criar outro Data Source a partir da tabela livros para que possamos usar no formulário de pedidos. A partir da janela Data Sources ou no menu Data Selecionando a opção Add New Data Source , selecione DataBase, aceite a conexão já criada com o banco de dados livraria.mdf e na janela onde são exibidos as tabelas do banco de dados selecione a tabela Livros informando nome LivrosDS para o dataset a ser criado;

174 175

Vamos repetir o procedimento e criar mais dois novos Data Sources : ClientesDS e PagmentosDS. Iremos usar estes DataSources no formulário de pedidos logo em seguida.

176 177 178 179 180

Veremos a seguir como usar os Data Sources criados. Lembra que no formulário , alteremos o tipo de coluna do campo LivroID no DataGridView para DataGridViewComboBoxColumn. Pois bem, agora na propriedade DataSource vamos indicar o nome LivrosDS referente ao Data Source que acabamos de criar definindo as propriedades DisplayMember como titulo e ValueMember como livroID;

181 182 183 184

Vamos agora selecionar a comboBox definida para o campo ClienteID e a partir da janela Data Sources arrastar e soltar a tabela Clientes do data source ClientesDS criado. Em seguida repita o procedimento para a comboBox do campo forma pagamento ID arrastando a tabela Pagamentos do data source PagamentosDS;

185 186 187 188 189

Perceba que na bandeja do formulário os objetos DataSet, BindingSource e TableAdapter são criados para cada Data Source usado no formulário. Execute o projeto pressionando F5 e vejamos o resultado: 1- Note que no lugar de exibir o código do livro o DataGridView exibe uma coluna contendo os títulos de cada livro;

190 191

2- A combobox referente a forma de pagamento agora exibe a descrição do pagamento e não o seu código;

192

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

193 194 195 196 197 198 199 200 201 202 203 204

Nota: Eu poderia ter criado um único dataset usando todas as tabelas mas resolvi mostrar esta alternativo que pode ser usada se você pretende usar os data sources criados em mais de um formulário. E temos então o formulário completo pronto para ser usado no cadastramento de pedidos usando um interface amigável que foi criada sem você ter que digitar praticamente nenhuma linha de código. Naturalmente faltou espaço para falar das validações e outros recursos que podem ser usados para tornar a aplicação mais robusta e funcional. Essa é deixa para você atuar melhorando o exemplo acima... Até o próximo artigo VB.NET...

José Carlos Macoratti

205 206 207 208 209 210 211 212

VB 2005 - Atualizando dados com TableAdapter
Como atualizar os dados usando o TableAdapter ?
Após você realizar as alterações no seu DataSet você deve enviar os dados para o banco de dados. Lembre-se que um DataSet trabalha no modo desconectado e se você não enviar as atualizações para o banco de dados ele não refletirá as operações feitas no DataSet. Se estiver usando um TableAdapter você deve usar o comando Update deste componente 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 214 215 216

O componente TableAdapter ira executar os comandos : INSERT, UPDATE E DELETE tendo como base os valores obtidos para a propriedade RowState. A propriedade RowState obtém um dos valores da enumeração DataRowState da classe DataRow. Os valores possíveis para esta enumeração são: Nome do membro Added Deleted Detached Descrição

A linha foi adicionada ao DataRowCollection e o método AcceptChanges não foi A linha foi excluída usando o método Delete da DataRow.

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. A linha tenha sido modificada e o método AcceptChanges não foi chamado.

Modified Unchanged 217 218 219

A linha não foi alterada desde que o método AcceptChanges foi chamado pela ú

Estes valores dependem de dois fatores: 1. Do tipo de operação que foi realizada na linha; 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 221

O procedimento exato para atualizar uma fonte de dados pode variar dependendo das necessidades do seu negócio mas sua aplicação deverá realizar os seguintes passos:

222 223 224

1. Chamar o método Update do adaptador dentro de um bloco Try/Catch; 2. Se uma exceção for capturada, localize a linha de dados que causou o erro; 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 226 227 228 Para salvar os dados para o banco de dados chame o método Update do TableAdapter passando o nome da tabela que contém os valores que deverão ser escritos no banco de dados. 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 230 231 232 233 234 235 236
- EndEdit - aplica as alterações pendentes a fonte de dados - Update(NortwhindDataSet.Customers) - envia as alterações para o banco de dados, informando o dataset e a tabela a ser atualizada;(Existem outros métodos Updates sobrecarregados onde a assinatura é diferente e com isso os parâmetros informados podem variar)

Atualizando tabelas relacionadas
Quando você precisar atualizar tabelas relacionadas em um dataset é importante atualizar as tabelas na sequência correta a fim de reduzir a chance de gerar um erro relacionado integridade referencial.

237 238 239 240 241 242

A ordem de execução do comando também seguira os índices da coleção DataRowCollection no dataset. Para evitar erros relacionados a integridade dos dados ocorram a melhor maneira é atualizar o banco de dados usando a seguinte sequência: 1. Tabela filha - deletar os registros; 2. Tabela Pai - inserir , atualizar e deletar registros; 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 244 245 246

Se você esta atualizando duas ou mais tabelas relacionadas deverá incluir toda a lógica de atualização em uma transação. Uma transação é um processo que assegura que todas as mudanças relacionadas feitas no banco de dados tenham sido completadas com sucesso antes 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 248 249 250 251 252 253 254 255 256 257 258

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

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

A seguir temos um exemplo de realização de tal operação. As etapas a serem cumpridas são : 1. Crie três tabelas temporárias para tratar os registros diferentes; 2. Chame o método Update para cada subconjunto de linhas usando um bloco try/catch. Se ocorrem erros, verifique e corrija; 3. Confirme as alterações para o banco de dados (Commit); 4. Libere os recursos alocados quando da criação das tabelas temporárias; O exemplo abaixo trata com as tabelas Orders e Customers. Essas tabelas possui um 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 261 262 263 264

Com isso temos um panorama geral sobre como atualizar dados usando um TableAdapter. Além das instruções InsertCommand, UpdateCommand, and DeleteCommand, o componente é criado com métodos que podem ser executados diretamente no banco de dados. Estes métodos podem ser chamados diretamente para manipular dados. Os métodos são: TableAdapter.Insert, TableAdapter.Update, e TableAdapter.Delete.

265 266 267 268 269 270 271 272 273 274 275 276

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

Embora não seja complicado de usar como toda novidade desperta curiosidade e dúvidas, e, por este motivo este artigo procurar mostrar as maneiras mais comuns e úteis de usar o controle DataGridView. Para começar você vai ter que ter instalado os seguintes recursos:

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

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

277 278 279 280

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

Usando DataGridView com Arrays
Vamos definir um array chamado vetor com dois elementos e vincular o array ao 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 282 283 284 285 286 287 288 289 290 291 292 293

Opa ! mas o que aconteceu ??? O resultado não é o esperado. Por que ? Você esperava que os elementos do array fossem exibidos mas somente o tamanho de cada elemento foi exibido. O motivo deste comportamento é que o DataGridView procura pela primeira propriedade pública do objeto ao qual esta vinculado e a primeira propriedade pública de um array de strings é o tamanho de cada elemento contido no array. Para fazer da maneira correta devemos envolver o array de string em uma classe que exponha propriedades públicas que retornem o conteúdo de cada um dos elementos que desejamos exibir. Podemos fazer isso criando uma classe e definindo um construtor e uma propriedade pública para ter acesso ao valor de cada elemento do vetor: No menu Project -> Add Class selecione o template Class e informe o nome vetor.vb para o 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 296 297 298 299 300 301 302 303 304

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

Usando DataGridView com DataSets Tipados
Um uso muito comum do controle DataGridView é a vinculação a uma tabela de um banco de dados. Podemos efetuar esta tarefa usando um DataSet tipado. Vamos incluir um dataset tipado ao projeto clicando sobre o nome do projeto com o botão direito do mouse e seleciona a opção Add New Item. Na janela selecione o template DataSet e clique Add; Habilite o DataBase Explorer no menu View e localize o banco de dados Northwind.mdf , expanda o objeto Tables e em seguida arraste e solte a tabela Customers no descrito DataSet1.xsd conforme a figura abaixo:

305 306 307 308 309 310 311

No próximo passo vamos vincular o dataset ao DataGridView e podemos fazer isto das seguintes formas: 1- Vincular o DataGridView diretamente ao adapter da tabela Customers: Inclua o projeto a seguinte declaração :
Imports dataGridViewTotal.DataSet1TableAdapters

A seguir inclua um botão de comando no formulário e inclua o código abaixo no evento Click 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 314 315 316 317 318 319

2- Vinculando o DataGridView a um BindginSource Para este exemplo você deve criar um TableAdapter para a tabela Customers. Para fazer isso inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a tabela Customers do banco de dados Northwind.mdb. A seguir Inclua no projeto a seguinte declaração (se ainda não o fez) :
Imports dataGridViewTotal.DataSet1TableAdapters

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 321 322 323 324 325 326 327 328

Usando o DataGridView com DataSets não tipados
Você também pode definir o dataset via código vinculando em seguida o componente ao DataGridView. Primeiro temos que criar e preencher um dataset para em seguida atribuir à propriedade DataSource do DataGridView o dataset gerado. No código estou atribuindo à propriedade DataMember a tabela gerada no dataset. Uma outra maneira de obter o mesmo resultado seria atribuir diretamente a propriedade DataSource a tabela gerada que no caso seria a primeira tabela (pois só temos uma) : 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 330 331 332

Obtendo o valor da célula selecionada e Atribuindo a célula atual
Para obter o valor da célula clicada pelo usuário em um DataGridView usamos o evento 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 334 335 336

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

Se desejar obter valor da primeira coluna quando o usuário selecionar uma linha o código 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 339 340

Para atribuir a célula atual via código podemos atribuir um valor a propriedade CurrentCell do DataGridView . No código abaixo estou atribuindo a célula atual como sendo a primeira 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 342 343 344 345 346 347 348 349 350 351 352 353 354 355

Validando a entrada de dados em uma célula
Podemos usar o evento CellValidating para verificar se a entrada de um usuário quando da edição dos dados de uma célula estiver ocorrendo é valida ou não. No exemplo acima iremos efetuar a validação da coluna CompanyName para isso devemos implementar o tratamento dos eventos CellValidating e CellEndEdits. O evento CellValidating ocorre quando a célula perde o foco de entrada habilitando a validação do seu conteúdo. O evento CellEndEdits ocorre quando o modo de edição é encerrado para a atual célula selecionada. No evento CellValidating é onde você determina se o valor de uma célula para um determinada coluna é válida. Se a validação da célula falha defina a propriedade Cancel da classe System.Windows.Forms.DataGridViewCellValidatingEventArgs para true. Isto faz com que o controle DataGridView não permita que o cursor deixe a célula. Definindo a propriedade ErrorText na linha para exibir uma mensagem para o usuário exibe um ícone de erro com uma dica que contém o texto para o erro.

356 357 358 359

No evento CellEndEdit defina a propriedade ErrorText na linha para uma string vazia. Este evento ocorre somente quando a célula existe no modo edit o qual não pode ocorrer se a validação falhar. 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 361 362 363 364 365 366

Tratando ocorrências de erros em um DataGridView
Podemos efetuar o tratamento de erros para o controle DataGridView usando o evento DataError o qual é disparado quando a fonte de dados detecta uma violação de restrição ou quebra de regra de negócio. A seguir temos um exemplo que quando ocorrer um valor para o campo CustomerID duplicado em uma nova linha ou linha sendo editada o evento DataError irá ocorrer e será tratado pela 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 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383

Exibindo imagens em células de um DataGridView
Podemos exibir uma figura ou um gráfico em uma linha de dados. Para exibir imagens em um controle DataGridView não há muito segredo pois ele trata nativamente qualquer imagem suportada pela classe Image bem como o ormato de imagem OLE usado por alguns banco de dados. Se a fonte de dados do controle DataGridView possuir uma coluna com imagens , elas serão exibida automaticamente exibidas no controle DataGridView.

Filtrando e ordenando colunas via código
Para filtrar os dados exibidos em um DataGridView podemos usar um objeto DataView. A seguir temos um exemplo onde estamos filtrando os dados para o código do cliente iniciado pela letra B: Nota: Para este exemplo você deve criar um TableAdapter para a tabela Customers. Para fazer isso inclua um novo DataSet no projeto e arraste a partir da janela DataBase Explorer a tabela Customers do banco de dados Northwind.mdb. Você deverá declarar os seguintes namespaces no projeto para que o código abaixo funcione: Imports System.Data.sqlclient 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 387 388 389 390 391 392 393

O dataView é obtido a partir do adapter chamando o método getData que retorna um DataTable preenchido conforme a consulta SQL definida. No código acima o objeto DataView permite aos usuário incluir novas linhas , via propriedade AllowNew no controle DataGridView e também excluir linhas , via propriedade AllowDelete. Podemos ainda ordenar as linhas especificando o campo e a ordem correspondente que será aplicada usando a propriedade Sort. (ASC ordem ascendente DESC ordem descendente) O filtro é feito pela expressão SQL usando a expressão LIKE via propriedade RowFilter. 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 395 396 397 398 399 400 401 402 403 404 405 406

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

Definindo um texto em ToolTips em células individuais
De forma geral usamos o recurso ToolTips para exibir valores em células do DataGridView que são muito pequenas para exibir todo o conteúdo. Podemos reescrever este comportamento de forma a definir textos para ToolTips para células individuais. Isto é útil para exibir informação adicional sobre a célula ou para fornecer ao usuário uma descrição mais detalhada sobre o conteúdo da célula. Para isto eu vou usar o o evento CellFormatting que ocorre quando o conteúdo de uma célula precisa ser formatado para exibição. A tabela Customers não possui um campo muito adequado para um exemplo mais convincente ,vou usar portanto o campo City de e escolher algumas cidades de forma que exibam o nome 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 409 410 411 412

Exibindo uma combobox em uma célula
Você pode exibir uma combobox em uma célula de forma a permitir que o usuário selecione valores determinados de uma lista existente. Neste caso você precisa incluir uma ComboBox na célula da coluna desejada. O código abaixo faz exatamente isto usando o controle 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 414

Se você não quiser usar um controle BindingSource pode incluir os itens diretamente no 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 417 418 419 420 421

Se você deseja permitir que os usuários possam incluir novos valores no controle ComboBox. Neste caso você terá que fazer o seguinte : 1-) Usar o evento EditingControlShowing que ocorre quando o usuário vai tentar editar dados no controle Combobox:
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 424 425 426 427 428 429

Neste código estou verificando se a célula que esta sendo editada é do tipo ComboBox. Neste caso estou definindo o estilo do ComboBox como DropDown de forma que o usuário possa digitar o novo item a ser incluído. 2-) Usar o evento CellValidating do controle DataGridView que ocorre sempre que o usuário termina de digitar e deixa a célula:
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 432 433 434 435

Aqui estou verificando e incluindo o novo item na ComboBox. Para que a inclusão seja possível a propriedade DataSource do coluna DataGridViewComboBoxColumn não pode estar definida; assim não podemos vincular o bindingsource e incluir itens na combobox tendo que usar o código que inclui os dados diretamente na combobox.

436 437 438

Eu poderia estender este artigo, mas são tantos os recursos do DataGridView a explorar que vamos continuar a falar sobre assunto mais adiante... Aguarde.

439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454

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

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

Vamos usar um banco de dados do Microsoft Access que foi criado com o nome de 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 458 459 460 461 462 463 464 465 466

Os namespaces usados na aplicação são:
Imports System.Data.OleDb Imports System.io Imports System.drawing

O banco de dados esta localizado na pasta bin e possui a seguinte definição para a conexão do tipo OledbConnection :
Public con As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.jet.OleDB.4.0;Data Source = " & Application.StartupPath & "\Agenda.mdb;")

As operações CRUD (Create, Update, Delete) são feitas via comandos SQL :
Incluir INSERT INTO Contatos(nome,endereco,fone,celular,email,nascimento,[imagem])VALUES('" & tb1.Text & "','" & tb2.Text & "','" & tb3.Text & "','" & tb4.Text & "','" & tb5.Text & "','" & tb6.Text & "', ?)" 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 & "'" DELETE * FROM Contatos WHERE nome = '" & cb1.SelectedItem & "'"

Alterar Excluir

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 470

Como estou disponibilizando o código completo creio que já escrevi demais. Baixe os fontes e bom estudo...

471 472 473 474 475 476 477 478 479 480 481 482 483 484

VB 2005 - Criando uma classe para acesso a dados
É uma prática recomendável criar uma camada de acesso a dados e encapsular o seu código. Você ganha em produtividade e facilita a manutenção. A seguir apresento algumas sugestões de classes com código de acesso a dados que você pode usar em seus projetos. Abra o Visual Basic 2005 Express e crie um projeto do tipo Windows Application onde serão criadas as classes. No menu Project clique na opção Add Class e na janela Add New Item selecione o template Class informando o nome acessoBD. Será criado o arquivo acessoBD.vb onde podemos criar as nossas classes para acesso a dados. Neste arquivo podemos criar uma ou várias classes. Começamos criando a classe AcessoBD com um construtor vazio e outro construtor onde definimos a string de conexão. O método getConexao retorna a conexão aberta e o método 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 487 488

Vamos criar a seguir dois métodos sobrecarregados onde poderemos passar o nome de um procedimento armazenado - Stored Procedure - com parâmetros e no outro uma instrução SQL retornando um DataReader:

489 490 491 492 493

Veremos a seguir um exemplo de como usar as classes acima em um formulário Windows Forms. Aproveitando o mesmo projeto onde criamos a classe AcessoBD inclua no formulário form1.vb um controle ListBox e um botão de comando. No evento Click do botão de comando inclua o 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 496

Vamos agora criar um método que retorna um DataSet e que recebe o nome da stored procedure , o nome do DataTable a ser preenchido e a coleção de parâmetros:

497 498 499 500

Para usar o exemplo acima irei acessar o banco de dados Northwind.mdf e usar a stored procedure CustOrderHist existente. Esta stored procedure possui o parâmetro @CustomerID que deve ser informado para o método juntamente como valor de retorno desejado. O 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 505 506 507

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

508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537

VB.NET 2005 - Conectando com objetos de dados
Este artigo apresenta como criar objetos para gerenciar informações de negócios e em seguida mostra como criar um objeto como fonte de dados para estes objetos. Mostra também como usar TableAdapters para obter dados a partir de um banco de dados e preencher os objetos de dados. O objeto da fonte de dados é criado pela execução do assistente de configuração de fonte de dados selecionando como tipo de dados a opção Object. Depois de completar o assistente as propriedades públicas do objeto estarão disponíveis na janela Data Source para que você possa efetuar a vinculação dos objetos com controles em formulário Windows. As tarefas a serem realizadas neste artigo são as seguintes:
• • • • • •

Criar uma novo projeto do tipo Windows Application; Criar objetos de negócio que vão representar clientes; Criar e configurar um objeto de fonte de dados na aplicação baseado nos objetos criados acima usando o assistente de configuração de fonte de dados; Incluir controles em um formulário que serão vinculados aos dados nos objetos definidos; Criar um dataset com os TableAdapter para mover os dados entre os objetos e o banco de dados; Preencher os objetos com os dados do banco de dados.

Desenhando o cenário para a nossa aplicação: Você possui um banco de dados que contém uma tabela chamada Clientes e deseja criar uma aplicação Windows, usando o VB 2005, para gerenciar os seus dados através da criação de objetos de negócio que representam os Clientes. Deseja também poder exibir em um formulário os dados desta tabela e também preencher os seus objetos de dados com os dados do banco de dados. Nota: Não importa qual seja o seu banco de dados desde que haja um provedor através do qual possamos efetuar uma conexão com ele. Neste artigo eu vou usar o banco de dados Microsoft Access. 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 539 540

1- Criando um o projeto Windows Abra o Visual Basic 2005 Express Edition e crie um novo projeto do tipo Windows Application chamado vendasNetObjetos;

541 542 543 544 545 546

2- Criando os objetos de Negócio : Clientes e Pedidos Vamos criar agora os objetos de negócio que irão representar as informações da tabela Clientes. No menu Project selecione a opção Add Class; Na janela Add New Item selecione o template Class e informe o nome Clientes.vb clicando a 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 549 550 551 552 553 554 555 556

A classe Clientes possui como membros os campos definidos na tabela Clientes. Além disso estamos sobrescrevendo a função ToString para poder exibir o nome do cliente seguido do seu código. Neste ponto já temos a classe Clientes.vb pronta. Ela representa os dados da tabela Clientes.

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

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

557

558 559

• •

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

560 561 562

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

563 564

Clique no Botão Next > ;

565 566 567

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

568 569 570 571 572 573 574

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

Na janela Soluction Explorer, selecione Form1 e clique em View Designer; Arraste e solte o item Clientes a partir da janela Data Source para o formulário Form1;

575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 Ao final do processo você verá os controles serem criados no formulário bem com o objeto ClientesBindingNavigator para navegação e o objeto ClientesBindingSource para vinculação dos controles com a fonte de dados.

Criando um TableAdapter para carregar os dados da tabela no objeto
Para mover os dados entre os objetos e o banco de dados vamos usar o recurso TableAdapters. Para criar um TableAdapter para a tabela Clientes vamos usar o assistente de configuração de Data Source;
• • •

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

591 592 593 594
• •

Salve a string de conexão com o nome padrão VendasConnectionString e clique no botão Next> ; Selecione a tabela Clientes e clique no botão Finish;

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

598 599 600 601 Vamos agora incluir instâncias dos objetos ClientsTableAdapters e VendasDataSet ao formulário arrastando e soltando estes objetos a partir da ToolBox para o formulário form1.vb conforme a figura abaixo:

602

603 604

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

605 606 607 608 609 610 Como você pode notar embora tenhamos os objetos criados e as instâncias do dataset e do tableAdapter também criados falta mover os dados da tabela clientes para os controles vinculados no formulário. Para isso teremos que criar uma rotina em nosso projeto para carregar os dados nos objetos usando o TableAdapter. 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 612 613 614 615 616 617

No código da rotina carregaClientes() criamos um DataTable chamado ClientesDados onde obtemos os dados da tabela Clientes através do método GetData do TableAdapter. Em seguida percorremos o DataTable e atribuímos os valores de cada linha (clientesLinha) ao objeto clienteAtual que é uma instância da classe Clientes. Para finalizar efetuamos a vinculação do objeto via BindingSource para exibir os dados no formulário. Para chamar a rotina criada inclua uma chamada à mesma no evento Load do formulário form1:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load carregaClientes() End Sub

618 619

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

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

Sign up to vote on this title
UsefulNot useful