VB.NET - Usando ListView com uma base de dados
A plataforma .NET realmente facilitou a vida de quem precisa acessar banco de dados, além de fornecer controles mais robustos e com muitas propriedades , seu conjunto de classes para acesso a dados presentes no namespace System.Data oferece diversos recursos poderosos.
Neste artigo vou mostrar como podemos usar alguns destes controles e classes de acesso a dados para gerenciar dados e um base de dados Access.
Neste artigo vamos usar os seguintes controles:
Vamos usar também o namespace System.Data.OleDb que irá fornecer as classes para acesso a um banco de dados Access.
Nosso objetivo será exibir os dados da tabela Orders (Pedidos) do banco de dados Northwind.mdb usando os controles acima citados.
Teremos que exibir três visões dos dados:
Teríamos então que ter as seguintes visões dos dados da tabela Orders.
Exibindo todos os registros da tabela Orders | |
Exibindo os Pedidos para um Cliente | |
Exibindo os Pedidos para um Pais. |
É claro que queremos obter este resultado usando um interface amigável onde o usuário possa obter o resultado de forma dinâmica.
Vamos então construir esta interface usando o controle TabControl e o controle ListView.
Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET ; dê ao projeto o nome de listViewBD.(ou qualquer outro nome que julgue pertinente)
Altere também a propriedade Name do formulário para frmPedidos.
No formulário padrão inclua (arraste e solte) o controle TabControl a partir da caixa de ferramentas (ToolBox).
Vamos agora criar três abas no controle TabControl. Para isto selecione o controle e na janela de propriedades localize a propriedade TagPages ; clique no botão com os três pontos para criar e atribuir nomes para as três abas que vamos criar. Veja a figura abaixo:
- Altere a propriedade Name do controle para tabPedidos.
Vamos definir o namespace a ser usado e as variáveis de acesso aos dados. Abaixo temos estas declarações:
A declaração dos namespaces usados deve ser feita no início do projeto.
I
mports System.Data.OledbDefinição das variáveis que deve ser feita no início do formulário.
'Definicão das variáveis de acesso aos dados'Adaptadores
Dim daPedidos As
OleDbDataAdapter
Dim daClientes As
OleDbDataAdapter
Dim daPais As
OleDbDataAdapter
'DataSet
Dim ds As
DataSet
Vamos selecionar a aba Pedidos e incluir no controle TabControl o componente ListView e um botão de comando, conforme a figura abaixo:
Nome dos
controles : ListView - lvPedidos Altere as seguintes Propriedades do listView lvPedidos conforme abaixo:
View = Details |
|
figura 1.0 - Exibindo todos os Pedidos |
Selecione a seguir a aba - Pedidos por Cliente e inclua os controles : ListView , button e Combobox, conforme figura a seguir:
Nome dos
controles: ListView :
lvClientes Altere as seguintes Propriedades do listView lvClientes conforme abaixo:
View = Details
|
|
Figura 2.0 - Exibindo os Pedidos por Cliente |
Selecione a última aba e inclua os controles : ListView , Button e Combobox, conforme figura a seguir:
Nome dos
controles: ListView :
lvPais Altere as seguintes Propriedades do listView lvPais conforme abaixo:
View = Details
|
|
Figura 3.0 - Exibindo os Pedidos por País |
Agora vamos definir para cada controle ListView as colunas que vamos exibir. Por uma questão de escolha eu vou exibir somente os seguintes campos da tabela Orders:
Agora , para todos os controles ListView do projeto , selecione a propriedade Columns e clique no botão (Collection). A seguir informe o nome e o tamanho da coluna conforme a figura abaixo:
Clique no botão OK para encerrar. Você deverá obter o seguinte resultado :
Vamos agora por a mão na massa ou seja no código que irá fazer tudo isto funcionar.
NO evento Load do formulário que iremos chamar de CarregarDados vamos incluir o código abaixo:
Private Sub CarregarDados(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conexao As String 'define a string de conexao conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\teste\Northwind.mdb" 'cria o objeto connection cn = New OleDbConnection(conexao) 'Instancia dos adaptadores : um para cada tabela daPedidos = New OleDbDataAdapter("Select * from Orders", cn) daClientes = New OleDbDataAdapter("Select * from Customers", cn) daPais = New OleDbDataAdapter("Select * from Paises", cn) 'Instancia e preenche o dataset Try ds = New DataSet daPedidos.Fill(ds, "Orders") daClientes.Fill(ds, "Customers") daPais.Fill(ds, "Paises") Catch ex As Exception MsgBox(ex.Message) End Try 'preenche a combobox com os clientes cboClientes.DataSource = ds.Tables("Customers") cboClientes.DisplayMember = ds.Tables("Customers").Columns("CompanyName").ToString cboClientes.ValueMember = ds.Tables("Customers").Columns("CustomerID").ToString 'preenche a combobox com os paises (Como eu não estou usando o codigo do Pais na tabela Orders este código não irá usar 'o campo PaisID . Ao invés disto vamos obter o texto da combobox que será o nome do Pais. cboPais.DataSource = ds.Tables("Paises") cboPais.DisplayMember = ds.Tables("Paises").Columns("NomePais").ToString cboPais.ValueMember = ds.Tables("Paises").Columns("PaisID").ToString End Sub
|
Este código , que já esta comentado, ira preencher os controles combobox com os dados das tabelas Customers e Paises (esta tabela eu criei para o artigo ela não existe no banco de dados Northwind.mdb)
Na interface da figura 1.0 vamos incluir o seguinte código no evento click do botão - Exibir pedidos :
Private Sub btnPedidos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPedidos.Click 'limpa os itens do listview lvPedidos.Items.Clear() Dim i As Integer 'percorre a tabela pedidos e preenche o listview For i = 0 To ds.Tables("Pedidos").Rows.Count - 1 lvPedidos.Items.Add(ds.Tables("Pedidos").Rows(i)("OrderID")) lvPedidos.Items(i).SubItems.Add(ds.Tables("Pedidos").Rows(i)("ShipName")) lvPedidos.Items(i).SubItems.Add(ds.Tables("Pedidos").Rows(i)("ShipAddress")) lvPedidos.Items(i).SubItems.Add(ds.Tables("Pedidos").Rows(i)("ShipCity")) lvPedidos.Items(i).SubItems.Add(ds.Tables("Pedidos").Rows(i)("ShipCountry")) Next End Sub
|
O resultado da execução do projeto quando o usuário clicar no botão : Exibir Pedidos , será:
Para a interface da figura 2.0 , onde iremos exibir os dados para um determinado cliente, devemos incluir o código abaixo no evento Click do botão : Selecione um Cliente:
Private Sub btnClientes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClientes.Click Dim strCliente As String = cboClientes.SelectedValue Dim SQL As String = "Select * from Orders where CustomerID = '" & strCliente & "'" Dim daClientes As New OleDbDataAdapter(SQL, cn) Try daClientes.Fill(ds, "Clientes") Catch ex As Exception MsgBox(ex.Message) End Try lvClientes.Items.Clear() Dim i As Integer 'percorre a tabela pedidos e preenche o listview For i = 0 To ds.Tables("Clientes").Rows.Count - 1 lvClientes.Items.Add(ds.Tables("Clientes").Rows(i)("OrderID")) lvClientes.Items(i).SubItems.Add(ds.Tables("Clientes").Rows(i)("ShipName")) lvClientes.Items(i).SubItems.Add(ds.Tables("Clientes").Rows(i)("ShipAddress")) lvClientes.Items(i).SubItems.Add(ds.Tables("Clientes").Rows(i)("ShipCity")) lvClientes.Items(i).SubItems.Add(ds.Tables("Clientes").Rows(i)("ShipCountry")) Next ds.Tables("Clientes").Clear() End Sub
|
O resultado obtido quando da execução do projeto é exibido na tela abaixo:
O código da interface da figura 3.0, onde iremos exibir os dados do pedido para um Pais, temo seguinte código colocado no evento click do botão - Selecione um Pais:
Private Sub btnPais_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPais.Click 'obtem o texto da combobox selecionado Dim strPais As String = cboPais.Text 'seleciona os pedidos para o pais indicado Dim SQL As String = "Select * from Orders where ShipCountry = '" & strPais & "'" Dim daPais As New OleDbDataAdapter(SQL, cn) daPais.Fill(ds, "Pais") Try daPais.Fill(ds, "Pais") Catch ex As Exception MsgBox(ex.Message) End Try lvPais.Items.Clear() Dim i As Integer 'percorre a tabela pedidos e preenche o listview For i = 0 To ds.Tables("Pais").Rows.Count - 1 lvPais.Items.Add(ds.Tables("Pais").Rows(i)("OrderID")) lvPais.Items(i).SubItems.Add(ds.Tables("Pais").Rows(i)("ShipName")) lvPais.Items(i).SubItems.Add(ds.Tables("Pais").Rows(i)("ShipAddress")) lvPais.Items(i).SubItems.Add(ds.Tables("Pais").Rows(i)("ShipCity")) lvPais.Items(i).SubItems.Add(ds.Tables("Pais").Rows(i)("ShipCountry")) Next ds.Tables("Pais").Clear() End Sub |
O resultado da execução do projeto e seleção de um Pais será a seguinte tela:
Você viu que é tudo muito simples e fácil de fazer. Você consegue gerenciar dados usando interfaces gráficas com um resultado satisfatório.
Agora vamos ser sincero , oh código engessado esse que criamos , não é mesmo ??? Você não acha que pode melhorar este código ???
Vou deixar alguns questionamentos para você refletir ?
Eu não poderia ter usado um DataReader ? (é mais rápido.)
Dá para eu remover o código do formulário e
criar classes ? (fica mais fácil manter)
O tratamento de erros não poderia ser mais robusto ?
Agora é com você... Pegue o projeto completo aqui :
listViewBD.zip
Eu sei é apenas VB.NET , mas
eu gosto...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#