Visual Basic 2005 Express Edition

  • Uploaded by: Denilson
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Visual Basic 2005 Express Edition as PDF for free.

More details

  • Words: 8,370
  • Pages: 55
1

2 3 4 5 6 7 8 9 10 11 12

13

14

Visual Basic 2005 Express Edition

15 16 17 18 19 20 21 22 23 24 25

Autor: Alexandro Vieira de Souza

26 27 28 29 30 31 32

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

• Visual Basic 2005 Express Edition

Iniciando um Projeto – Ambiente VB 2005

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

• 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 :

52 53

-•

New Project – Para você iniciar um novo projeto, como foi mostrado no inicio da aula.

54 55

-•

56 57 58

-• Add New Item – Para você adicionar um novo item, por exemplo : Um novo formulário, um novo banco de dados.

59 60

-•

Save "Arquivo" – Para salvar o projeto que está aberto no momento.

61 62

-•

Save All – Para salvar todos os arquivos que estão abertos nas abas.

63

-•

Cut – Recortar algo no formulário.

64 65

-•

Copy – Para copiar algo do projeto.

66 67

-•

Paste – Para colar algo que foi copiado.

68

-•

Find – Serve para procurar algo no projeto.

Open File – Para abrir algum projeto.

69 70 71

-•

72 73

-•

74 75

-•

Undo – Desfazer algo.

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

-•

Redo – Refazer algo.

Coment – Comentário para fora as linhas selecionadas. Uncoment – (Não Conheço)

-•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

VB 2005 - Criando um Formulário de Pedidos com os Assistentes

107 108 109 110

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.

111 112

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.

113

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

114 115 116

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.

117 118 119

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

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

124 125

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

126 127

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.

128 129

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

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;

143 144

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

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;

155 156 157 158

• • • •

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

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

169 170 171 172 173

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

Perceba que na bandeja do formulário os objetos DataSet, BindingSource e TableAdapter são criados para cada Data Source usado no formulário.

187

Execute o projeto pressionando F5 e vejamos o resultado:

188 189

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

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.

196 197 198

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.

199 200 201

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...

202

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

203 204

José Carlos Macoratti

205

VB 2005 - Atualizando dados com TableAdapter

206 207

Como atualizar os dados usando o TableAdapter ?

208 209 210

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.

211 212

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

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

215 216

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:

217 218 219

Nome do membro

Descrição

Added

A linha foi adicionada ao DataRowCollection e o método AcceptChanges não foi

Deleted

A linha foi excluída usando o método Delete da DataRow.

Detached

A linha foi criada mas não faz parte de qualquer DataRowCollection. A DataRow imediatamente após ele ter sido criada e para que ela seja adicionada a uma col removida de uma coleção.

Modified

A linha tenha sido modificada e o método AcceptChanges não foi chamado.

Unchanged

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

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

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.

228

O trecho de código que pode ser usado para realizar tal operação: Try Me.Validate() Me.CustomersBindingSource.EndEdit() Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers) MsgBox("Atualização realizada com sucesso...") Catch ex As Exception MsgBox("A atualização falhou...") End Try

229 230 231 232

- 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)

233

Atualizando tabelas relacionadas

234 235 236

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

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

261 262 263 264

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

VB 2005 - Manipulando o DataGridView

266 267 268

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...)

269 270 271 272

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.

273

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

274



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

275 276

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

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

278

Usando DataGridView com Arrays

279 280

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

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

282 283

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

284 285 286

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.

287 288 289

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.

290 291

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:

292 293

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

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

296

Usando DataGridView com DataSets Tipados

297 298

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.

299 300 301

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;

302 303 304

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

No próximo passo vamos vincular o dataset ao DataGridView e podemos fazer isto das seguintes formas:

307

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

308

Inclua o projeto a seguinte declaração :

309

Imports dataGridViewTotal.DataSet1TableAdapters

310 311

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

2- Vinculando o DataGridView a um BindginSource

314 315 316

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.

317

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

318

Imports dataGridViewTotal.DataSet1TableAdapters

319

Agora insira um novo botão de comando e no evento Click do botão insira o código: Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'cria uma instância da TableAdapter Dim da As New CustomersTableAdapter 'cria uma instância de um BindingSource Dim bindsrc As New BindingSource 'define a fonte de dados para o bindingsource e obtém os dados do método GetData do TableAdapter bindsrc.DataSource = da.GetData 'vincula o BindingSource ao DataGridView DataGridView1.DataSource = bindsrc End Sub

320

Usando o DataGridView com DataSets não tipados

321 322

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

323 324

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

325 326 327 328

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

330

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

331 332

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

329

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

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

335 336

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

(e.ColumnIndex).

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

Validando a entrada de dados em uma célula

342 343

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.

344 345

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

346 347

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

348 349

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

350 351 352 353

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.

354 355

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

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.

359

No exemplo vamos verificar se a coluna CompanyName esta vazia para a entrada do usuário: Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating ' Valida o entrada para o CompanyName não permitindo valores em branco If DataGridView1.Columns(e.ColumnIndex).Name = "CompanyName" Then If String.IsNullOrEmpty(e.FormattedValue.ToString()) Then DataGridView1.Rows(e.RowIndex).ErrorText = "O nome da Companhia não pode ser vazio." e.Cancel = True End If End If End Sub Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit ' Limpa o erro da linha no caso do usuário pressionar ESC DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty End Sub

360

Tratando ocorrências de erros em um DataGridView

361 362 363

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.

364 365 366

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

Exibindo imagens em células de um DataGridView

368 369 370 371

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.

372 373

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

374

Filtrando e ordenando colunas via código

375 376 377

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:

378 379 380

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.

381

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

382 383

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

O dataView é obtido a partir do adapter chamando o método getData que retorna um DataTable preenchido conforme a consulta SQL definida.

388 389

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.

390 391

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)

392

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

393

Uma outra maneira de ordenar colunas é usar o método Sort do próprio controle DataGridView: Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button3.Click DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Descending) End Sub

394 395

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

396

Definindo um texto em ToolTips em células individuais

397 398 399 400 401

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.

402 403

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.

404 405 406

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

Exibindo uma combobox em uma célula

409 410 411 412

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

VB.NET 2005 - Agenda com acesso a dados

440 441 442 443 444 445

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).

446

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

447 448 449 450 451 452

• • • • • •

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;

453 454

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

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

462 463

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

464 465

Public con As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.jet.OleDB.4.0;Data Source = " & Application.StartupPath & "\Agenda.mdb;")

466

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

Alterar Excluir

467

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 & "'"

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

VB 2005 - Criando uma classe para acesso a dados

472 473 474

É 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.

475 476

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

477 478

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

479 480 481

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.

482 483 484

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

Veremos a seguir um exemplo de como usar as classes acima em um formulário Windows Forms.

491 492 493

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

VB.NET 2005 - Conectando com objetos de dados

509 510 511 512 513

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.

514 515 516 517

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.

518

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

519 520 521 522 523 524 525 526 527

• • • • • •

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.

528

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

529 530 531 532 533

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.

534 535 536

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.

537

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

Obs: A tabela foi criada com apenas 3 campos para facilitar o entendimento.

538

1- Criando um o projeto Windows

539 540

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

541

2- Criando os objetos de Negócio : Clientes e Pedidos

542 543

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

544

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

545 546

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

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.

551

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

552

Criando um objeto de fonte de dados

553 554

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:

555 556

557



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

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;



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



Clique no Botão Next > ;

560 561 562

563 564

565 566 567



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

568 569

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

570 571 572

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:

573 574

• •

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

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.

579 580

Criando um TableAdapter para carregar os dados da tabela no objeto

581 582 583

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;

584 585 586 587 588 589 590

• • •



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

602

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:

603 604

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

605 606 607 608 609

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.

610

Inclua o código abaixo no formulário form1.vb: Private Sub carregaClientes() Dim clientesDados As VendasDataSet.ClientesDataTable = ClientesTableAdapter1.GetData Dim clientesLinha As VendasDataSet.ClientesRow For Each clientesLinha In clientesDados Dim clienteAtual As New Clientes() With clienteAtual .clienteID = clientesLinha.clienteID .nome = clientesLinha.Nome If Not clientesLinha.IsEnderecoNull Then .endereco = clientesLinha.Endereco End If End With ClientesBindingSource.Add(clienteAtual) Next End Sub

611 612 613 614 615

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.

616 617

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.

Related Documents


More Documents from "Manuel Retamozo"

December 2019 10
Visual_basic Com Bd Firebird
December 2019 12
December 2019 13
December 2019 11