VB .NET - Vinculando uma lista genérica a um GridView e DataGridView


Hoje vou mostrar como você pode vincular uma lista genérica a um grid, datagridview ou gridview, usando o VB .NET.

Uma lista genérica geralmente representa uma coleção de objetos que desejamos exibir em um controle de lista ou grid.

Então ao invés de fazer o acesso direto à fonte de dados vamos gerar uma lista genérica de objetos e vincular essa informação ao grid.

Eu vou mostrar a vinculação em um controle DataGridView em um projeto Windows Forms e em um controle GridView em um projeto ASP .NET Web Forms.

Recursos usados:

Obs: Usando o Visual Studio podemos criar uma solução com dois projetos : o projeto windows forms e o projeto web forms.

1 - Vinculando uma lista genérica a um GridView

Abra o Visual Studio 2012 Express for web e clique em New Project;

Selecione Visual Basic -> Web -> ASP .NET Empty Web Application e informe o nome GridView_ListaGenerica e clique em OK;

No menu PROJECT clique Add New Item e selecione o template Web Form informando o nome Default.aspx e clicando no botão Add;

Neste momento devemos definir a conexão com o banco de dados e aqui você pode usar qualquer banco de dados suportado pela plataforma .NET.

Se desejar, você pode usar o banco de dados Northwind disponibilizado neste link: Download Northwind Database

Eu vou usar um banco de dados Cadastro.mdf que foi criado no SQL Server Local DB e que possui a tabela Clientes que possui a seguinte estrutura:

Vamos definir a string de conexão para este banco de dados no arquivo Web.Config conforme mostrado a seguir:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5"  />
    </system.web>
 
<connectionStrings>
    <add name ="conexaoSQLServer" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"/>
  </connectionStrings>

</configuration>

Agora abra a página Default.aspx no modo Design e inclua o controle GridView a partir da ToolBox configurando-o conforme mostra o código e o leiaute abaixo:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="GridView_ListaGenerica._Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style1 {
            font-size: x-large;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <strong><span class="auto-style1">Macoratti .net</span></strong>
        <hr />
    <div>
    <asp:GridView ID="gdvClientes" runat="server" AutoGenerateColumns = "false" AllowPaging = "true" OnPageIndexChanging = "OnPaging">
    <Columns>
    <asp:BoundField DataField = "Id" HeaderText = "Id" />
    <asp:BoundField DataField = "Nome" HeaderText = "Nome" />
    <asp:BoundField DataField = "Email" HeaderText = "Email" />
    <asp:BoundField DataField = "sexo" HeaderText = "Sexo" />
    <asp:BoundField DataField = "pais" HeaderText = "Pais" />
    </Columns>
    </asp:GridView>
    </div>
    </form>
</body>
</html>

Vamos definir a nossa classe Cliente com 5 propriedades para representar um Cliente que desejamos exibir.

No menu PROJECT clique em Add Class e informe o nome Cliente.vb e a seguir defina o código abaixo nesta classe:

Public Class Cliente

    Public Property Id As Integer
    Public Property Nome As String
    Public Property Email As String
    Public Property Sexo As String
    Public Property Pais As String

End Class

Vamos criar outra classe chamada ClienteDAL onde iremos definir o código que irá gerar a lista genérica de clientes.

No menu PROJECT clique em Add Class e informe o nome ClienteDAL.vb e a seguir defina o código abaixo nesta classe:

Imports System.Data.SqlClient

Public Class ClienteDAL

    Private Function ListaClientes() As List(Of Cliente)
        Dim constring As String = ConfigurationManager.ConnectionStrings("conexaoSQLServer").ConnectionString
        Using con As SqlConnection = New SqlConnection(constring)
            Using cmd As SqlCommand = New SqlCommand("select * from clientes", con)
                con.Open()
                Using sdr As SqlDataReader = cmd.ExecuteReader
                    Dim clientes As New List(Of Cliente)
                    While sdr.Read
                        clientes.Add(New Cliente)
                        clientes((clientes.Count - 1)).Id = sdr("Id").ToString
                        clientes((clientes.Count - 1)).Nome = sdr("Nome").ToString
                        clientes((clientes.Count - 1)).Email = sdr("Email").ToString
                        clientes((clientes.Count - 1)).Sexo = sdr("sexo").ToString
                        clientes((clientes.Count - 1)).Pais = sdr("pais").ToString
                    End While
                    con.Close()
                    Return clientes
                End Using
            End Using
        End Using
    End Function
End Class

Agora precisamos acessar o método ListaClientes da classe ClienteDAL na página Default.aspx.

Abra o arquivo code-behind Default.aspx.vb e defina o código abaixo nesta página:

Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Me.BindGrid(ClienteDAL.ListaClientes)
        End If
    End Sub

    Private Sub BindGrid(ByVal clientes As List(Of Cliente))
        gdvClientes.DataSource = clientes
        gdvClientes.DataBind()
    End Sub

    Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
        gdvClientes.PageIndex = e.NewPageIndex
        Me.BindGrid(ClienteDAL.ListaClientes)
    End Sub
End Class

Este código primeiro verifica, no evento Load da página, se não é um postback e então chama o método ListaClientes da classe ClienteDAL na rotina BindGrid() que retorna uma lista de clientes.

A rotina BindGrid() vincula a lista de clientes ao controle GridView via propriedade DataSource e o método OnPaging do controle GridView permite a página atualizando o controle com os dados.

Podemos usar a propriedade AutoFormat do GridView para aplicar um estilo mais elegante ao controle:

Executando o projeto iremos obter:

Em um projeto mais complexo poderíamos ter criado outro projeto do tipo Class Library e definir uma classe para acessar a lista de clientes. Esse projeto funcionaria assim como nossa camada de acesso aos dados. Você poderia então gerar uma DLL desse projeto e reutilizar o código em outros projetos.

2 - Vinculando uma lista genérica a um DataGridView

Abra o Visual Studio 2012 Express for desktop e clique em New Project;

Selecione Visual Basic -> Windows -> Windows Forms Application e informe o nome DataGridView_ListaGenerica e clique em OK;

Vamos usar o mesmo banco de dados e as mesmas classes Cliente e ClienteDAL.

Precisamos então definir no arquivo App.Config a string de conexão da mesma forma que fizemos no projeto Web. Veja abaixo como ficou:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <connectionStrings>
    <add name ="conexaoSQLServer" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"/>
  </connectionStrings>
</configuration>

Abra o formulário form1.vb e inclua a partir da ToolBox o controle DataGridView conforme o leiaute abaixo:

name = dgvClientes

Para acessar o arquivo de configuração temos que incluir uma referência no projeto ao namespace System.Configuration.

No menu PROJECT clique em Add Reference e marque o namespace conforme a figura abaixo:

Agora no formulário Form1.vb vamos incluir no evento Load a chamada ao método ListaClientes:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dgvClientes.DataSource = ClienteDAL.ListaClientes
    End Sub

Abaixo temos o resultado obtido:

Pegue os projetos completos aqui: GridView_ListaGenerica.zip e DataGridView_ListaGenerica.zip

João 3:35 O Pai ama ao Filho, e todas as coisas entregou nas suas mãos.

João 3:36 Quem crê no Filho tem a vida eterna; o que, porém, desobedece ao Filho não verá a vida, mas sobre ele permanece a ira de Deus.

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti