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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#