3132 Visual Basic

download 3132 Visual Basic

of 55

Transcript of 3132 Visual Basic

  • 1

    2 3 4 5 6 7 8 9 10 11 12

    Visual Basic 2005 13 Express Edition 14

    15 16 17 18 19 20 21 22 23

    Autor: 24 Alexandro Vieira de Souza 25

  • Visual Basic 2005 Express Edition 26 27 28 29 Iniciando um Projeto Ambiente VB 2005 30 31 32

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

    44

  • 45 46 1 o formulrio onde voc vai criar suas aplicaes, como adicionar botes, imagens, labels, etc. 47 2 Esse menu so as opes da ToolBox, encontrada no menu 3, que ajuda voc adicionar os botes, 48 labels, imagens e vrias outras coisas. 49 3 Menu 2 Superior, responsvel por boa parte do trabalho, que tem as seguintes opes de trabalho : 50 51

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

  • 69 - Coment Comentrio para fora as linhas selecionadas. 70 71

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

  • VB 2005 - Criando um Formulrio de Pedidos com os 105 Assistentes 106

    107

    Neste artigo eu vou mostrar como voc pode criar um formulrio para efetuar o pedido de 108 venda de um produto em uma aplicao Windows Forms usando somente os assistentes de 109 configurao para Data Source. 110

    Suponha que voc tenha que criar um formulrio de pedidos para vendas em uma aplicao 111 Windows Forms usando o VB 2005 Express Edition. 112

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

    Nota: No vou entrar no mrito do modelo nem nos detalhes de criao do banco de dados, 114 das tabelas e dos relacionamentos. importante efetuar a modelagem de forma correta 115 definindo as chaves primrias as chaves estrangeiras e os relacionamentos. 116

    A representao do modelo relacional acima, feito para as tabelas usadas neste artigo, foi 117 obtido a partir do diagrama do banco de dados criado na IDE do Visual Basic 2005 Express 118 Edition. Abaixo temos a figura onde exibimos o diagrama criado: 119

  • Alm disso voc ter que criar uma interface que ir usar, como tabelas principais, as tabelas 120 Pedido e Itens, e que dever receber os pedidos dos clientes e discriminar os itens destes 121 pedidos. 122

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

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

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

    Altere o ttulo do formulrio form1.vb para Pedidos. Abaixo voc tem uma viso do projeto 128 no VB 2005. 129

  • Vamos incluir um novo Data Source selecionando a partir do menu Data ou da janela Data 130 Source a opo Add New Data Source... 131

    Na janela do Assistente de configurao para Data Source selecione a opo Database pois 132 estaremos efetuando a conexo um banco de dados relacional SQL Server. 133

  • 134

    Escolha a seguir a conexo com a fonte de dados. Se ela no existir clique no boto New 135 Connection e selecione o tipo da fonte de dados e sua localizao; 136

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

  • Na janela DataSource voc ver o DataSet - PedidosDS exibindo as tabelas itens e Pedido. 140 Perceba que a tabela Pedido possui um vinculo com a tabela Itens decorrente do 141 relacionamento feito pela chave pedidoID; 142

    A janela Solution Explorer tambm exibe o DataSet onde possvel visualizar o esquema 143 criado com base nas tabelas do banco de dados. 144

  • Na janela Data Sources vamos expandir a tabela Pedido e alterar o modo de exibio de 145 alguns dos seus campos, para isso basta selecionar o campo e escolher a opo desejada a 146 partir do menu; 147

    clienteID altere o modo para ComboBox 148 formaPagamentoID altere para o modo ComboBox 149

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

    Arraste e solte a tabela no formulrio form1.vb do projeto. Voc dever ver cada campo 152 sendo exibido no formato definido no DataSet; ver tambm a criao dos objetos abaixo na 153 bandeja do formulrio; 154

    PedidoDS (dataset) 155 PedidoBindingSource 156 PedidoTableAdapter 157 PedidoBindingNavigator 158

  • Em seguida, ainda na janela Data Sources, selecione a tabela itens que esta vinculada a 159 tabela Pedido conforme a figura (No confunda com a tabela Itens que tambm foi criada no 160 dataset) e altere o modo de exibio para DataGridView 161

    Arraste e solte a tabela no mesmo formulrio form1.vb , logo abaixo do local onde os itens da 162 tabela pedido foram exibidos; 163

  • Vamos selecionar o DataGridView criado e clicar na opo Edit Columns; 164

    165

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

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

    Vamos criar outro Data Source a partir da tabela livros para que possamos usar no formulrio 169 de pedidos. A partir da janela Data Sources ou no menu Data Selecionando a opo Add New 170 Data Source , selecione DataBase, aceite a conexo j criada com o banco de dados 171 livraria.mdf e na janela onde so exibidos as tabelas do banco de dados selecione a tabela 172 Livros informando nome LivrosDS para o dataset a ser criado; 173

  • Vamos repetir o procedimento e criar mais dois novos Data Sources : ClientesDS e 174 PagmentosDS. Iremos usar estes DataSources no formulrio de pedidos logo em seguida. 175

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

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

  • Perceba que na bandeja do formulrio os objetos DataSet, BindingSource e TableAdapter 185 so criados para cada Data Source usado no formulrio. 186

    Execute o projeto pressionando F5 e vejamos o resultado: 187

    1- Note que no lugar de exibir o cdigo do livro o DataGridView exibe uma coluna contendo 188 os ttulos de cada livro; 189

  • 2- A combobox referente a forma de pagamento agora exibe a descrio do pagamento e no 190 o seu cdigo; 191

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

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

    E temos ento o formulrio completo pronto para ser usado no cadastramento de pedidos 196 usando um interface amigvel que foi criada sem voc ter que digitar praticamente nenhuma 197 linha de cdigo. 198

    Naturalmente faltou espao para falar das validaes e outros recursos que podem ser usados 199 para tornar a aplicao mais robusta e funcional. Essa deixa para voc atuar melhorando o 200 exemplo acima... 201

    At o prximo artigo VB.NET... 202

    203

    Jos Carlos Macoratti 204

  • VB 2005 - Atualizando dados com TableAdapter 205

    206

    Como atualizar os dados usando o TableAdapter ? 207

    Aps voc realizar as alteraes no seu DataSet voc deve enviar os dados para o banco de 208 dados. Lembre-se que um DataSet trabalha no modo desconectado e se voc no enviar as 209 atualizaes para o banco de dados ele no refletir as operaes feitas no DataSet. 210

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

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

    Desta forma ao chamar o mtodo Update ele executa a instruo criada quando o TableAdapter foi originalmente configurado e no uma das consultas adicionais que podem ter sido criadas com o Assistente de configurao do TableAdapter.

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

    A propriedade RowState obtm um dos valores da enumerao DataRowState da classe 215 DataRow. Os valores possveis para esta enumerao so: 216

    Nome do membro Descrio

    Added A linha foi adicionada ao DataRowCollection e o mtodo AcceptChanges no foi chamad

    Deleted A linha foi excluda usando o mtodo Delete da DataRow.

    Detached A linha foi criada mas no faz parte de qualquer DataRowCollection. A DataRowimediatamente aps ele ter sido criada e para que ela seja adicionada a uma coleremovida de uma coleo.

    Modified A linha tenha sido modificada e o mtodo AcceptChanges no foi chamado.

    Unchanged A linha no foi alterada desde que o mtodo AcceptChanges foi chamado pela ltima vez.

    Estes valores dependem de dois fatores: 217

    1. Do tipo de operao que foi realizada na linha; 218 2. Se o mtodo AcceptChanges tiver sido chamado no DataRow; 219

    Ao invocar o mtodo AcceptChanges para um DataRow, o mtodo EndEdit implicitamente chamado para encerrar qualquer edio realizada. Se o valor da propriedade RowState de uma linha for igual a Added ou Modified, o valor da propriedade RowState torna-se igual a Unchanged. Se o valor de RowState for igual a Deleted a linha removida.

    A classe Datatable tambm possui um mtodo AcceptChanges o qual afeta as alteraes feitas para a toda a tabela.

    O procedimento exato para atualizar uma fonte de dados pode variar dependendo das 220 necessidades do seu negcio mas sua aplicao dever realizar os seguintes passos: 221

  • 1. Chamar o mtodo Update do adaptador dentro de um bloco Try/Catch; 222 2. Se uma exceo for capturada, localize a linha de dados que causou o erro; 223 3. Corrija o erro na linha de dados e tente atualizar novamente; 224

    Para localizar linhas que possuem erros em seu DataSet faa o seguinte:

    Verifique a propriedade HasErrors e veja se existe qualquer erro no seu dataset; Se a propriedade HasErrors for igual a true, ento percorra a coleo de tabelas e a

    seguir de linhas para encontrar a linha com erro:

    Private Sub encontraErros() Dim table As Data.DataTable Dim row As Data.DataRow If DataSet1.HasErrors Then For Each table In DataSet1.Tables If table.HasErrors Then For Each row In table.Rows If row.HasErrors Then ' Processar o erro End If Next End If Next End If End Sub

    Para salvar os dados para o banco de dados chame o mtodo Update do TableAdapter 225 passando o nome da tabela que contm os valores que devero ser escritos no banco de 226 dados. 227

    O trecho de cdigo que pode ser usado para realizar tal operao: 228

    Try Me.Validate() Me.CustomersBindingSource.EndEdit() Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers) MsgBox("Atualizao realizada com sucesso...") Catch ex As Exception MsgBox("A atualizao falhou...") End Try

    - EndEdit - aplica as alteraes pendentes a fonte de dados 229 - Update(NortwhindDataSet.Customers) - envia as alteraes para o banco de dados, informando o dataset e a 230 tabela a ser atualizada;(Existem outros mtodos Updates sobrecarregados onde a assinatura diferente e com 231 isso os parmetros informados podem variar) 232

    Atualizando tabelas relacionadas 233

    Quando voc precisar atualizar tabelas relacionadas em um dataset importante atualizar as 234 tabelas na sequncia correta a fim de reduzir a chance de gerar um erro relacionado 235 integridade referencial. 236

  • A ordem de execuo do comando tambm seguira os ndices da coleo DataRowCollection 237 no dataset. Para evitar erros relacionados a integridade dos dados ocorram a melhor maneira 238 atualizar o banco de dados usando a seguinte sequncia: 239

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

    Um DatarowCollection o componente principal de um objeto DataTable; enquanto que DataColumnCollection define o esquema da tabela , DataRowCollection contm os dados atuais da tabela, onde cada DataRow que compe um DataRowCollection representa uma linha nica (registro).

    Se voc esta atualizando duas ou mais tabelas relacionadas dever incluir toda a lgica de 243 atualizao em uma transao. Uma transao um processo que assegura que todas as 244 mudanas relacionadas feitas no banco de dados tenham sido completadas com sucesso antes 245 de confirmar, atravs do comando commit, qualquer mudana. 246

    Transaes so grupos de operaes combinadas em uma unidade lgica de trabalho. Elas so usadas para controlar e manter a consistncia e integridade de cada ao na transao, a despeito dos erros que possam ocorrer no sistema.

    Para saber mais sobre transaes veja o artigo : 247

    ADO.NET - Usando Transaes 248 ADO - Usando Transaes - BeginTrans, CommitTrans e RollBack. 249 O Processamento de Transaes: BeginTrans, CommitTrans e RollBack. 250

    A seguir temos um exemplo de realizao de tal operao. As etapas a serem cumpridas so : 251

    1. Crie trs tabelas temporrias para tratar os registros diferentes; 252 2. Chame o mtodo Update para cada subconjunto de linhas usando um bloco try/catch. 253

    Se ocorrem erros, verifique e corrija; 254 3. Confirme as alteraes para o banco de dados (Commit); 255 4. Libere os recursos alocados quando da criao das tabelas temporrias; 256

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

    A tabela Customers a tabela Pai e a tabela Orders a tabela filha; - Criamos uma tabela para os registros deletados; - Uma tabela para os novos registros; - Uma tabela para os registros modificados;

    Private Sub AtualizaBD()

  • 'cria as tabelas para tratar os registros diferentes: deletados, novos e modificados Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable = _ CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable) Dim newChildRecords As NorthwindDataSet.OrdersDataTable = _ CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable) Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable = _ CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable) 'Atualiza a tabela filha -> Orders Try If deletedChildRecords IsNot Nothing Then OrdersTableAdapter.Update(deletedChildRecords) End If 'atualiza a tabela Pai -> Customers CustomersTableAdapter.Update(NorthwindDataSet.Customers) If newChildRecords IsNot Nothing Then OrdersTableAdapter.Update(newChildRecords) End If If modifiedChildRecords IsNot Nothing Then OrdersTableAdapter.Update(modifiedChildRecords) End If 'salva as alteraes no banco de dados NorthwindDataSet.AcceptChanges() Catch ex As Exception MessageBox.Show("Ocorreu um erro durante o processo de atualizao") Finally 'libera os recursos alocados If deletedChildRecords IsNot Nothing Then deletedChildRecords.Dispose() End If If newChildRecords IsNot Nothing Then newChildRecords.Dispose() End If If modifiedChildRecords IsNot Nothing Then modifiedChildRecords.Dispose() End If End Try End Sub

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

    Alm das instrues InsertCommand, UpdateCommand, and DeleteCommand, o componente 261 criado com mtodos que podem ser executados diretamente no banco de dados. Estes 262 mtodos podem ser chamados diretamente para manipular dados. Os mtodos so: 263 TableAdapter.Insert, TableAdapter.Update, e TableAdapter.Delete. 264

  • VB 2005 - Manipulando o DataGridView 265

    266

    O DataGridView um controle com 1001 utilidades, flexvel e poderoso se comparados com 267 controles grids das verses anteriores do VB (lembra do DBGrid, MSFlexGrid, DataGrid, etc...) 268

    269

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

    Para comear voc vai ter que ter instalado os seguintes recursos: 273

    Visual Basic 2005 Express Edition (Aproveite grtis) 274

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

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

    Usando DataGridView com Arrays 278

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

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

  • 50,00"} DataGridView1.DataSource = vetor End Sub

    Opa ! mas o que aconteceu ??? O resultado no o esperado. Por que ? 281

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

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

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

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

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

    Voltando ao formulrio form1.vb e alterando o cdigo para usar a classe criada temos: 294

  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Dim vetor() As String = {"Super CD VB 40,00", "Super DVD .NET 50,00"} '========================================== 'outras maneiras de declarar e iniciar um array '(a) 'Dim vetor(2) As String 'vetor(0) = "Super CD VB 40,00" 'vetor(1) = "Super DVD.NET 50,00" '(b) 'Dim vetor() As String 'vetor = New String() {"Super CD VB 40,00", "Super DVD .NET 50,00"} '============================================= Dim valores() As Vetor = {New Vetor("Super CD VB 40,00"), New Vetor("Super DVD .NET 50,00")} DataGridView1.DataSource = valores End Sub

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

    Usando DataGridView com DataSets Tipados 296

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

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

    Habilite o DataBase Explorer no menu View e localize o banco de dados Northwind.mdf , 302 expanda o objeto Tables e em seguida arraste e solte a tabela Customers no descrito 303 DataSet1.xsd conforme a figura abaixo: 304

  • No prximo passo vamos vincular o dataset ao DataGridView e podemos fazer isto das 305 seguintes formas: 306

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

    Inclua o projeto a seguinte declarao : 308

    Imports dataGridViewTotal.DataSet1TableAdapters 309

    A seguir inclua um boto de comando no formulrio e inclua o cdigo abaixo no evento Click 310 do boto: 311

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'cria uma instncia da TableAdapter Dim da As New CustomersTableAdapter 'vincula o TableAdapter ao DataGridView DataGridView1.DataSource = da.GetData End Sub

    Executando o projeto temos: 312

  • 2- Vinculando o DataGridView a um BindginSource 313

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

    A seguir Inclua no projeto a seguinte declarao (se ainda no o fez) : 317

    Imports dataGridViewTotal.DataSet1TableAdapters 318

    Agora insira um novo boto de comando e no evento Click do boto insira o cdigo: 319

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'cria uma instncia da TableAdapter Dim da As New CustomersTableAdapter 'cria uma instncia de um BindingSource Dim bindsrc As New BindingSource 'define a fonte de dados para o bindingsource e obtm os dados do mtodo GetData do TableAdapter bindsrc.DataSource = da.GetData 'vincula o BindingSource ao DataGridView DataGridView1.DataSource = bindsrc End Sub

    Usando o DataGridView com DataSets no tipados 320

    Voc tambm pode definir o dataset via cdigo vinculando em seguida o componente ao 321 DataGridView. 322

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

    No cdigo estou atribuindo propriedade DataMember a tabela gerada no dataset. Uma 325 outra maneira de obter o mesmo resultado seria atribuir diretamente a propriedade 326 DataSource a tabela gerada que no caso seria a primeira tabela (pois s temos uma) : 327 ds.tables(0). Neste caso no necessitaramos de definir o Datamember. 328

  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'define a string de conexao Dim connStr As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" 'define a instruo sql Dim sql As String = "SELECT * FROM Customers" 'define os objetos connecton, command e dataadapter Dim conn As SqlConnection = New SqlConnection(connStr) Dim comm As SqlCommand = New SqlCommand(sql, conn) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) 'define o dataset Dim ds As DataSet = New DataSet() Try '---abre a conexao--- conn.Open() '---preenche o dataset--- dataadapter.Fill(ds, "Clientes") '---fecha a conexao--- conn.Close() '---vincula o dataset ao DataGridView--- DataGridView1.DataSource = ds 'ou ds.tables(0) '---define a tabela a ser exibida--- DataGridView1.DataMember = "Clientes" Catch ex As Exception MsgBox(ex.Message) End Try End Sub

    Obtendo o valor da clula selecionada e Atribuindo a clula 329 atual 330

    Para obter o valor da clula clicada pelo usurio em um DataGridView usamos o evento 331 CellEnter: 332

    Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter

    '---Quando o usurio clicar no controle , exibe o conteudo da clula MsgBox(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)

    End Sub

    Neste cdigo estamos obtendo o valor da clula pelo ndice da linha (e.RowIndex) e da coluna 333 (e.ColumnIndex). 334

    Se desejar obter valor da primeira coluna quando o usurio selecionar uma linha o cdigo 335 ficaria assim : 336

    Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter

    '---Quando o usurio clicar no controle , exibe o conteudo da clula referente a primeira coluna (Column=0) MsgBox(DataGridView1.Rows(e.RowIndex).Cells(0).Value)

    End Sub

  • Para atribuir a clula atual via cdigo podemos atribuir um valor a propriedade CurrentCell 338 do DataGridView . No cdigo abaixo estou atribuindo a clula atual como sendo a primeira 339 linha e a segunda coluna ( row=0 e column=1) 340

    Private Sub setCurrentCellButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles setCurrentCellButton.Click ' Define a clula atual para a clula na coluna 1 e linha 0 Me.dataGridView1.CurrentCell = Me.dataGridView1(1, 0) End Sub

    Validando a entrada de dados em uma clula 341

    Podemos usar o evento CellValidating para verificar se a entrada de um usurio quando da 342 edio dos dados de uma clula estiver ocorrendo valida ou no. 343

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

    O evento CellValidating ocorre quando a clula perde o foco de entrada habilitando a 346 validao do seu contedo. 347

    O evento CellEndEdits ocorre quando o modo de edio encerrado para a atual clula 348 selecionada. 349

    No evento CellValidating onde voc determina se o valor de uma clula para um 350 determinada coluna vlida. Se a validao da clula falha defina a propriedade Cancel da 351 classe System.Windows.Forms.DataGridViewCellValidatingEventArgs para true. Isto faz com 352 que o controle DataGridView no permita que o cursor deixe a clula. 353

    Definindo a propriedade ErrorText na linha para exibir uma mensagem para o usurio exibe 354 um cone de erro com uma dica que contm o texto para o erro. 355

  • No evento CellEndEdit defina a propriedade ErrorText na linha para uma string vazia. Este 356 evento ocorre somente quando a clula existe no modo edit o qual no pode ocorrer se a 357 validao falhar. 358

    No exemplo vamos verificar se a coluna CompanyName esta vazia para a entrada do usurio: 359

    Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating

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

    Tratando ocorrncias de erros em um DataGridView 360

    Podemos efetuar o tratamento de erros para o controle DataGridView usando o evento 361 DataError o qual disparado quando a fonte de dados detecta uma violao de restrio ou 362 quebra de regra de negcio. 363

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

    Private Sub dataGridView1_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError

    ' Se a fonte de dados levanta uma exceo quando uma clula esta comitda

  • exibe um erro. If e.Exception IsNot Nothing AndAlso e.Context = DataGridViewDataErrorContexts.Commit Then MessageBox.Show("O cdigo do cliente - CustomerID - no pode ser duplicado.") End If

    End Sub

    Exibindo imagens em clulas de um DataGridView 367

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

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

    Filtrando e ordenando colunas via cdigo 374

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

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

    Voc dever declarar os seguintes namespaces no projeto para que o cdigo abaixo funcione: 381

    Imports System.Data.sqlclient 382 Imports datagridviewTotal.DataSet1TableAdapters 383

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

    '---crria uma instncia de um tableadapter --- Dim adapter As New CustomersTableAdapter '---cria uma instncia de um dataview--- Dim dv As New DataView(adapter.GetData) 'filtra usando o criterio escolhido: clientes com cdigo contendo B no incio With dv .AllowNew = False .AllowDelete = True .Sort = "ContactTitle ASC, Address ASC" .RowFilter = "CustomerID LIKE 'B*'" End With ' atribui o dataview ao datagridview DataGridView1.DataSource = dv End Sub O resultado da execuo deste cdigo ser: 384

  • 385 O dataView obtido a partir do adapter chamando o mtodo getData que retorna um DataTable preenchido 386 conforme a consulta SQL definida. 387

    No cdigo acima o objeto DataView permite aos usurio incluir novas linhas , via propriedade AllowNew no 388 controle DataGridView e tambm excluir linhas , via propriedade AllowDelete. 389

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

    O filtro feito pela expresso SQL usando a expresso LIKE via propriedade RowFilter. 392

    Uma outra maneira de ordenar colunas usar o mtodo Sort do prprio controle DataGridView: 393

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

  • System.EventArgs) Handles Button3.Click

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

    End Sub

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

    Definindo um texto em ToolTips em clulas individuais 396

    De forma geral usamos o recurso ToolTips para exibir valores em clulas do DataGridView que 397 so muito pequenas para exibir todo o contedo. Podemos reescrever este comportamento de 398 forma a definir textos para ToolTips para clulas individuais. Isto til para exibir informao 399 adicional sobre a clula ou para fornecer ao usurio uma descrio mais detalhada sobre o 400 contedo da clula. 401

    Para isto eu vou usar o o evento CellFormatting que ocorre quando o contedo de uma clula 402 precisa ser formatado para exibio. 403

    A tabela Customers no possui um campo muito adequado para um exemplo mais convincente 404 ,vou usar portanto o campo City de e escolher algumas cidades de forma que exibam o nome 405 do pais a qual pertenam. O cdigo o seguinte: 406

    'Define o texto da propriedade ToolTip para clulas da coluna especificada , no caso a coluna: City Sub dataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) _ Handles DataGridView1.CellFormatting

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

    O resultado pode ser visto na figura abaixo: 407

  • Exibindo uma combobox em uma clula 408

    Voc pode exibir uma combobox em uma clula de forma a permitir que o usurio selecione 409 valores determinados de uma lista existente. Neste caso voc precisa incluir uma ComboBox 410 na clula da coluna desejada. O cdigo abaixo faz exatamente isto usando o controle 411 BindingSource: 412

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

    '---inclui colunas no controle DataGridView--- DataGridView1.Columns.Add("ID", "Codigo") DataGridView1.Columns.Add("Nome", "Nome Aluno") '---define um controle bindingsource--- Dim bindingsource As New BindingSource '---inclui itens no controle--- bindingsource.Add("Matemtica") bindingsource.Add("Portugus") bindingsource.Add("Histria") '---cria uma coluna do tipo combobox--- Dim comboBoxCol As New DataGridViewComboBoxColumn '---define o cabecalho (header) --- comboBoxCol.HeaderText = "Disciplinas" '---vincula os dados--- comboBoxCol.DataSource = bindingsource '---Inclui a coluna combobox ao DataGridView--- DataGridView1.Columns.Add(comboBoxCol) End Sub

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

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

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

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

    '---cria uma coluna do tipo combobox--- Dim comboBoxCol As New DataGridViewComboBoxColumn

    '---define o cabecalho (header) --- comboBoxCol.HeaderText = "Disciplinas" '---inclui itens no controle--- comboBoxCol.Items.Add("Matemtica") comboBoxCol.Items.Add("Portugus") comboBoxCol.Items.Add("Histria") '---Inclui a coluna combobox ao DataGridView--- DataGridView1.Columns.Add(comboBoxCol) End Sub 415 Se voc deseja permitir que os usurios possam incluir novos valores no controle ComboBox. 416 Neste caso voc ter que fazer o seguinte : 417 418 1-) Usar o evento EditingControlShowing que ocorre quando o usurio vai tentar editar dados 419 no controle Combobox: 420 421 Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms. DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing Dim comboBoxColumn As DataGridViewComboBoxColumn = DataGridView1.Columns(2) If (DataGridView1.CurrentCellAddress.X = comboBoxColumn.DisplayIndex) Then Dim cb As ComboBox = e.Control If (cb IsNot Nothing) Then cb.DropDownStyle = ComboBoxStyle.DropDown End If End If End Sub 422 Neste cdigo estou verificando se a clula que esta sendo editada do tipo ComboBox. Neste 423 caso estou definindo o estilo do ComboBox como DropDown de forma que o usurio possa 424 digitar o novo item a ser includo. 425 426 2-) Usar o evento CellValidating do controle DataGridView que ocorre sempre que o usurio 427 termina de digitar e deixa a clula: 428 429 Private Sub DataGridView1_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms. DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating Dim comboBoxColumn As DataGridViewComboBoxColumn = DataGridView1.Columns(2) If (e.ColumnIndex = comboBoxColumn.DisplayIndex) Then If (Not comboBoxColumn.Items.Contains(e.FormattedValue)) Then comboBoxColumn.Items.Add(e.FormattedValue) End If End If End Sub 430 Aqui estou verificando e incluindo o novo item na ComboBox. Para que a incluso seja 431 possvel a propriedade DataSource do coluna DataGridViewComboBoxColumn no pode estar 432 definida; assim no podemos vincular o bindingsource e incluir itens na combobox tendo que 433 usar o cdigo que inclui os dados diretamente na combobox. 434 435

  • 436 Eu poderia estender este artigo, mas so tantos os recursos do DataGridView a explorar que 437 vamos continuar a falar sobre assunto mais adiante... Aguarde. 438

  • VB.NET 2005 - Agenda com acesso a dados 439

    440

    Se voc esta comeando agora a aprender o VB 2005 e tem dvidas em como criar uma 441 aplicao para acesso a dados que realize as tarefas de incluir, exclui, alterar e listar os 442 dados esta pequena agenda feita no Visual Basic 2005 exatamente o que voc procura: 443 simples , com cdigo sem complicaes , realizando as principais tarefas de manuteno (as 444 famosas operaes CRUD). 445

    Ao estudar esta aplicao voc vai aprender a: 446

    Criar um projeto de acesso a dados usando o Microsoft Access; 447 Criar uma interface com o usurio simples e funcional(Menus de opes com cones); 448 Realizar as operaes de incluso, alterao e excluso de dados; 449 Trabalhar com exibio de imagens em formulrio; 450 Salvar , remover e exibir as imagens em um banco de dados Access; 451 Acessar a internet a partir da sua aplicao VB; 452

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

    A aplicao ter apenas dois formulrios: o formulrio principal que mostrado abaixo: 455

  • 456 Os namespaces usados na aplicao so: 457 458 Imports System.Data.OleDb 459 Imports System.io 460 Imports System.drawing 461

    O banco de dados esta localizado na pasta bin e possui a seguinte definio para a conexo do 462 tipo OledbConnection : 463

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

    As operaes CRUD (Create, Update, Delete) so feitas via comandos SQL : 466

    Incluir INSERT INTO Contatos(nome,endereco,fone,celular,email,nascimento,[imagem])VALUES('" & tb1.Text & "','" & tb2.Text & "','" & tb3.Text & "','" & tb4.Text & "','" & tb5.Text & "','" & tb6.Text & "', ?)"

    Alterar UPDATE Contatos SET nome='" & tb1.Text & "',endereco='" & tb2.Text & "',fone='" & tb3.Text & "',celular='" & tb4.Text & "',email='" & tb5.Text & "',nascimento='" & tb6.Text & "',[imagem]=? WHERE nome='" & tb8.Text & "'"

    Excluir DELETE * FROM Contatos WHERE nome = '" & cb1.SelectedItem & "'"

    O cdigo que faz a chamada a um site da web o seguinte: 467

    Private Sub wbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wbtn.Click

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

  • End Sub

    A cara da projeto em execuo para exibio dos dados de um registro a seguinte : 468

    Como estou disponibilizando o cdigo completo creio que j escrevi demais. Baixe os fontes e 469 bom estudo... 470

  • VB 2005 - Criando uma classe para acesso a dados 471

    472

    uma prtica recomendvel criar uma camada de acesso a dados e encapsular o seu cdigo. 473 Voc ganha em produtividade e facilita a manuteno. 474

    A seguir apresento algumas sugestes de classes com cdigo de acesso a dados que voc pode 475 usar em seus projetos. 476

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

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

    Comeamos criando a classe AcessoBD com um construtor vazio e outro construtor onde 482 definimos a string de conexo. O mtodo getConexao retorna a conexo aberta e o mtodo 483 closeConexao fecha a conexo; 484

  • Nota: O modelo de configurao de formulrio (Configuration Forms) no esta disponvel em projetos Class Library pois no temos um arquivo App.Config para a DLL.

    Para ler o arquivo de configurao App.Config em sua aplicao VB 2005 , e exibir o resultado no console , voc pode usar o seguinte cdigo:

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

    Vamos criar a seguir dois mtodos sobrecarregados onde poderemos passar o nome de um 486 procedimento armazenado - Stored Procedure - com parmetros e no outro uma instruo 487 SQL retornando um DataReader: 488

  • Veremos a seguir um exemplo de como usar as classes acima em um formulrio Windows 489 Forms. 490

    Aproveitando o mesmo projeto onde criamos a classe AcessoBD inclua no formulrio form1.vb 491 um controle ListBox e um boto de comando. No evento Click do boto de comando inclua o 492 seguinte cdigo: 493

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'obtem a string de conexo do arquivo de configurao App.Config Dim strCon = My.Settings.NORTHWNDConnectionString

  • 'cria uma instncia da classe AccessBD usando o construtor 'que usa a string de conexao Dim oDB As New AcessoDB(strCon) Dim dr As SqlDataReader 'chama o mtodo retornaDataReader passando uma instruo SQL dr = oDB.retornaDataReader("Select * from Customers") 'percorre o datareader e exibe os dados no listbox Do While dr.Read ListBox1.Items.Add(dr(0) & " - " & dr(1)) Loop End Sub

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

    Vamos agora criar um mtodo que retorna um DataSet e que recebe o nome da stored 495 procedure , o nome do DataTable a ser preenchido e a coleo de parmetros: 496

  • Para usar o exemplo acima irei acessar o banco de dados Northwind.mdf e usar a stored 497 procedure CustOrderHist existente. Esta stored procedure possui o parmetro @CustomerID 498 que deve ser informado para o mtodo juntamente como valor de retorno desejado. O 499 DataTable retornado ir ser exibido em um controle DataGridView no formulrio; 500

  • Nota: A stored procedure CustOrderHist possui o seguinte cdigo: 501

    A seguir inclua o cdigo abaixo no evento Load do formulrio: 502

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'obtem a string de conexo do arquivo de configurao App.Config Dim strCon = My.Settings.NORTHWNDConnectionString 'cria instncia da classe acessoBD Dim oDados As New AcessoDB(strCon) 'define um dataset Dim ds As New DataSet 'obtem o dataset passando o nome da Stored Procedure, o parametro e o

  • valor do parametero (codigo do cliente=ALFKI) ds = oDados.retornaDataSet("CustOrderHist", "CustOrderHist", New SqlParameter("@CustomerID", "ALFKI")) 'se h dados preenche o datagridview If ds.Tables(0).Rows.Count > 0 Then DataGridView1.DataSource = ds.Tables(0) Else MsgBox("No h dados para este criterio") End If End Sub

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

    Note que a classe definida efetua o acesso ao banco de dados SQL Server e que eu no efetuei 504 um tratamento de exceo nas mesmas. Deixo esta tarefa para voc (dica: voc pode apenas 505 lanar a exceo (throw ex) ). Voc pode criar mais mtodos ou adaptar os mtodos 506 definidos ao seu projeto. 507

  • VB.NET 2005 - Conectando com objetos de dados 508

    509

    Este artigo apresenta como criar objetos para gerenciar informaes de negcios e em 510 seguida mostra como criar um objeto como fonte de dados para estes objetos. Mostra 511 tambm como usar TableAdapters para obter dados a partir de um banco de dados e 512 preencher os objetos de dados. 513

    O objeto da fonte de dados criado pela execuo do assistente de configurao de fonte de 514 dados selecionando como tipo de dados a opo Object. Depois de completar o assistente as 515 propriedades pblicas do objeto estaro disponveis na janela Data Source para que voc 516 possa efetuar a vinculao dos objetos com controles em formulrio Windows. 517

    As tarefas a serem realizadas neste artigo so as seguintes: 518

    Criar uma novo projeto do tipo Windows Application; 519 Criar objetos de negcio que vo representar clientes; 520 Criar e configurar um objeto de fonte de dados na aplicao baseado nos objetos 521

    criados acima usando o assistente de configurao de fonte de dados; 522 Incluir controles em um formulrio que sero vinculados aos dados nos objetos 523

    definidos; 524 Criar um dataset com os TableAdapter para mover os dados entre os objetos e o banco 525

    de dados; 526 Preencher os objetos com os dados do banco de dados. 527

    Desenhando o cenrio para a nossa aplicao: 528

    Voc possui um banco de dados que contm uma tabela chamada Clientes e deseja criar uma 529 aplicao Windows, usando o VB 2005, para gerenciar os seus dados atravs da criao de 530 objetos de negcio que representam os Clientes. Deseja tambm poder exibir em um 531 formulrio os dados desta tabela e tambm preencher os seus objetos de dados com os dados 532 do banco de dados. 533

    Nota: No importa qual seja o seu banco de dados desde que haja um provedor atravs do 534 qual possamos efetuar uma conexo com ele. Neste artigo eu vou usar o banco de dados 535 Microsoft Access. 536

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

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

    1- Criando um o projeto Windows 538

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

  • 2- Criando os objetos de Negcio : Clientes e Pedidos 541

    Vamos criar agora os objetos de negcio que iro representar as informaes da tabela 542 Clientes. 543

    No menu Project selecione a opo Add Class; 544

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

    A seguir inclua o seguinte cdigo na classe Clientes: 547

    Public Class Clientes Public Sub New() End Sub Public Sub New(ByVal clienteID As Integer, _ ByVal nome As String, _ ByVal endereco As String) clienteID_ = clienteID nome_ = nome endereco_ = endereco End Sub Private clienteID_ As Integer Public Property clienteID() As Integer Get Return clienteID_ End Get Set(ByVal value As Integer) clienteID_ = value End Set End Property Private nome_ As String Public Property nome() As String Get

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

    A classe Clientes possui como membros os campos definidos na tabela Clientes. Alm disso 548 estamos sobrescrevendo a funo ToString para poder exibir o nome do cliente seguido do 549 seu cdigo. 550

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

    Criando um objeto de fonte de dados 552

    Podemos criar uma fonte de dados baseada nos objetos criados previamente atravs do 553 assistente de configurao de Data Source. Vejamos como fazer isso: 554

    Abra a janela Data Sources clicando no menu Data e escolhendo a opo Show Data 555 Sources; 556

    557

  • Clique no link Add new Data Source; 558 Na janela Choose a Data Source Type selecione a opo Object e clique em Next; 559

    560

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

    563

    Clique no Boto Next > ; 564

  • 565

    Finalmente clique no boto Finish e voc ver o objeto Clientes na janela Data 566 Sources; 567

    568

    Criando o formulrio para vinculao dos dados 569

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

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

  • 575

    Ao final do processo voc ver os controles serem criados no formulrio bem com o objeto 576 ClientesBindingNavigator para navegao e o objeto ClientesBindingSource para vinculao 577 dos controles com a fonte de dados. 578

    Criando um TableAdapter para carregar os dados da tabela 579 no objeto 580

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

    A partir do menu Data, selecione a opo Add New Data Source; 584 Selecione a opo DataBase e clique em Next> ; 585 Na janela para escolher a conexo de dados clique no boto New Connection e na 586

    janela Add Connection selecione o Data Source Microsoft Access DataBase File e 587 selecione o caminho onde o banco de dados esta localizado(no nosso caso 588 c:\dados\Vendas.mdb) 589

    Clique no boto Next> ; 590

  • 591

    Salve a string de conexo com o nome padro VendasConnectionString e clique no 592 boto Next> ; 593

    Selecione a tabela Clientes e clique no boto Finish; 594

    595

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

  • 598

    Vamos agora incluir instncias dos objetos ClientsTableAdapters e VendasDataSet ao 599 formulrio arrastando e soltando estes objetos a partir da ToolBox para o formulrio form1.vb 600 conforme a figura abaixo: 601

    602

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

    605

    Como voc pode notar embora tenhamos os objetos criados e as instncias do dataset e do 606 tableAdapter tambm criados falta mover os dados da tabela clientes para os controles 607 vinculados no formulrio. Para isso teremos que criar uma rotina em nosso projeto para 608 carregar os dados nos objetos usando o TableAdapter. 609

    Inclua o cdigo abaixo no formulrio form1.vb: 610

    Private Sub carregaClientes() Dim clientesDados As VendasDataSet.ClientesDataTable = ClientesTableAdapter1.GetData Dim clientesLinha As VendasDataSet.ClientesRow For Each clientesLinha In clientesDados Dim clienteAtual As New Clientes() With clienteAtual .clienteID = clientesLinha.clienteID .nome = clientesLinha.Nome If Not clientesLinha.IsEnderecoNull Then .endereco = clientesLinha.Endereco End If End With ClientesBindingSource.Add(clienteAtual) Next End Sub

    No cdigo da rotina carregaClientes() criamos um DataTable chamado ClientesDados onde 611 obtemos os dados da tabela Clientes atravs do mtodo GetData do TableAdapter. Em 612 seguida percorremos o DataTable e atribumos os valores de cada linha (clientesLinha) ao 613 objeto clienteAtual que uma instncia da classe Clientes. Para finalizar efetuamos a 614 vinculao do objeto via BindingSource para exibir os dados no formulrio. 615

    Para chamar a rotina criada inclua uma chamada mesma no evento Load do formulrio 616 form1: 617

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

    Agora ao executar o projeto o formulrio ir exibir os dados permitindo a navegao pelos 618 registros: 619

  • 620

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

    624

    625 626