NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
Olá pessoal, o objetivo deste tópico é utilizar e mostrar como funciona o Generics com ObjectDataSource dentro de uma página .ASPX. É simples e fácil o desenvolvimento, ou seja, não irá digitar nada dentro da página .ASPX.CS. O único código que irei digitar é da classe DAO para criar o método retornará uma lista de dados.
No artigo anterior Generics publicado no site www.aspneti.com digitei códigos, tanto na DAO quando na página. Para verificar acesse o link.
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=264
Requisitos:
- Framework 2.0
- IDE Visual Studio.NET 2005
- Banco de dados SQL SERVER 2005
Referência: Obj 1.1
O primeiro passo foi criar um projeto do tipo WEB ou ASP.NET, cliquei com o botão direito e criei dentro da pasta APP_CODE uma classe chamada “UsuarioDAO.cs”. Criei um banco de dados chamado “Usuario.mdf” e uma tabela chamada “TB001_USUARIO”. O objetivo não é mostrar como criar o banco ou tabela. (Referência Obj 1.2)
Referência: Obj 1.2
Note que é uma tabela simples e prática para ser utilizada. Possui os campos: chave do tipo int e auto numérico, nome do tipo nvarchar(50) e por último o campo email do tipo nvarchar(50).
O passo seguinte depois de criar o banco de dados é criar a conexão dentro do arquivo web.config. Existe uma diferença para a conexão do banco de dados utilizando o SQL SERVER 2005 e 2000. Com a versão nova utilizarei a tag responsável diretamente pela conexão, connectionStrings.
<connectionStrings>
<add name="conn" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Usuario.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Referência: Obj 1.3
Antigamente se utilizava a tag appSettings para setar a conexão, hoje em dia já existe a tag chamada ConnectionStrings responsável por isso, como mostrado acima.
Após a criação do banco de dados e string de conexão no arquivo de configuração, basta criar a classe responsável pela camada de acesso a dados, ou seja, uma DAO. No começo criei uma classe chamada “UsuarioDAO.cs” cujo não foi desenvolvido nada dentro dela. Agora dentro da classe o primeiro passo é importar dois outros namespaces. (Referência Obj 1.4)
using System.Collections.Generic;
using System.Data.SqlClient;
Referência: Obj 1.4
São classes responsáveis para trazer uma lista de objetos e outra responsável para a comunicação do software com o banco de dados. O passo seguinte é colocar um namespace para a classe. (Referência Obj 1.5)
namespace generics.dao {
... classe / métodos ....
}
Referência: Obj 1.5
Por padrão não o Visual Studio .NET 2005 não vem com o namespace na classe, a versão 2003 já era colocado por padrão. Mas isso não é problema, basta clicar e digitar. Note que coloquei: generics.dao e dentro terá o nome da classe e alguns métodos. Antes de continuar dentro da classe, preciso criar uma outra classe apenas com os atributos transfer objects, os mesmos serão usados para o preenchimento da lista retornada.
Cliquei com o botão direito em cima do projeto, escolhi a opção ADD NEW ITEM, e por final na tela de TEMPLATE escolhi do tipo CLASS. Coloquei o nome de “UsuarioTO.cs”. Depois de criado, dentro da classe adicionei os seguintes parâmetros: nome, email e chave. (Referência Obj 1.6)
private int _chave;
private string _nome;
private string _email;
public string Email
{
get { return _email; }
set { _email = value; }
}
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
public int Chave
{
get { return _chave; }
set { _chave = value; }
}
Referência: Obj 1.6
A classe só possui gets e sets dos atributos. Pronto, depois de criado a classe de transfer object falta apenas criar o método para retornar a lista de dados. Esse método conecta no banco de dados, faz o select na tabela e retorna dados do tipo datareader. Pego os dados datareader e transformo em uma lista do objeto usuário.
public List<Usuario> getUsuarioDAO()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
{
using (SqlCommand command = new SqlCommand("select chave, nome, email from tb001_usuario", conn))
{
conn.Open();
List<Usuario> listUsu = new List<Usuario>();
using (SqlDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
UsuarioTO usuario = new UsuarioTO();
usuario.Chave = (int)dr["chave"];
usuario.Nome = (string)dr["nome"];
usuario.Email = (string)dr["email"];
listUsu.Add(usuario);
}
}
return listUsu;
}
}
}
Referência: Obj 1.7
Analisando a assinatura do método, note que o mesmo é público e retorna uma lista de um <tipo>. Não espera parâmetros de entrada. (Referência Obj 1.8)
public List<Usuario> getUsuarioDAO()
Referência: Obj 1.8
Após o método, veja a nova forma que pega o objeto de conexão. (Referência Obj 1.9)
using (SqlConnection conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
Referência: Obj 1.9
Já foi a conexão, agora falta apenas fazer o select usando o command, abrir a conexão com o open(), declarar a lista de objeto, adicionar o resulto no objeto e retornálo. (Referência Obj 1.10)
using (SqlCommand command = new SqlCommand("select chave, nome, email from tb001_usuario", conn))
{
conn.Open();
List<Usuario> listUsu = new List<Usuario>();
using (SqlDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
Usuario usuario = new Usuario();
usuario.Chave = (int)dr["chave"];
usuario.Nome = (string)dr["nome"];
usuario.Email = (string)dr["email"];
listUsu.Add(usuario);
}
}
return listUsu;
Referência: Obj 1.10
Cliquei com o botão direito do mouse em cima do projeto e adicionei um novo item do tipo WEB FORM chamado “ObjDataSource.aspx”. Ao lado direito, mais especificamente na “TOOLBOX”, existem os objetos necessários para uso. O primeiro adicionado é o objeto gridview. O Visual Studio.NET 2005 utiliza o “drag drop”, ou seja, clicar a arrastar. (Referência Obj 1.11)
Referência: Obj 1.11
Note que o objeto está separado pela ABA “Data”, ou seja, dentro da aba. O GridView está circulado na referência Obj 1.11 com o objetivo de mostrar o que está sendo usado na página .ASPX
Cliquei a arrastei para a página o objeto no módulo de design. Passando para o modo HTML, acrescentei algumas tags e colunas. (Referência Obj 1.12)
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="false" >
<EmptyDataTemplate>
Sem registro encontrado.
</EmptyDataTemplate>
<Columns>
<asp:BoundField DataField="nome" HeaderText="nome" />
<asp:BoundField DataField="email" HeaderText="email" />
</Columns>
</asp:GridView>
Referência: Obj 1.12
A referência (Obj 1.2), em primeiro passo é colocar o atributo “autogeneratecolumns=false” no objeto GridView.
<EmptyDataTemplate>
Sem registro encontrado.
</EmptyDataTemplate>
Referência: Obj 1.13
A tag <EmptyDataTemplate> coloquei antes de <Columns>. Serve apenas para mostrar a descrição caso não retorne dado algum. Por exemplo: a lista de dados não retornou nada, já é detectado e com isso mostrará ao usuário “Sem registro encontrado”.
<Columns>
<asp:BoundField DataField="nome" HeaderText="nome" />
<asp:BoundField DataField="email" HeaderText="email" />
</Columns>
Referência: Obj 1.14
As colunas são mostradas de acordo com o transfer object, ou seja, os mesmos valores da classe “UsuarioDTO.cs” coloquei no atributo do GridView chamado DataField. Mostrei apenas os campos: “nome e email”.
Configurado corretamente o componente responsável em mostrar os dados, basta colocar outro objeto chamado “ObjectDataSource”. O mesmo encontra-se também junto ao “toolbox” da ferramenta IDE Visual Studio.NET 2005. (Referência Obj 1.15)
Referência: Obj 1.15
Cliquei no objeto e arrastei para minha página, ou seja, a mesma página que se encontra o GridView. Falta agora a configuração necessária para que o mesmo mostre os dados no grid. Usarei o assistente do Visual Studio.NET 2005. Em modo “design”, cliquei em cima do objeto de tela, foi mostrada uma seta ao lado direito com a opção Configure Data Source. (Referência Obj 1.16).
Referência: Obj 1.16
Cliquei em cima do link “Configure Data Source” e automaticamente apareceu uma outra tela buscando todas as classes de meu projeto. (Referência Obj 1.17)
Referência: Obj 1.17
Escolhi a classe criada “generics.dao.UsuarioDAO” e apertei o botão NEXT e fui para o próximo passo. (Referência Obj 1.18)
Referência: Obj 1.18
Automaticamente na aba SELECT mostra todos os métodos da classe que escolhi. Note que só mostrará todos os métodos públicos, métodos privados não aparecem. Foi detectado automaticamente que o mesmo retorna uma List<Usuario>. Para terminar, cliquei no botão FINISH.
Terminei de configurar o objeto, em modo SOURCE tenho que vincular o meu objeto ao gridview ao objectdatasource. Para isso coloquei o atributo: (Referência Obj 1.19)
DataSourceID="dtSource"
Referência: Obj 1.19
O valor “dtSource” é apenas o nome de meu objeto ObjectDataSource. A referência Obj 1.20 mostra como ficou toda a página criada nestes passos acima.
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="ObjDataSource.aspx.cs" Inherits="ObjDataSource" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="dtSource">
<EmptyDataTemplate>
Sem registro encontrado.
</EmptyDataTemplate>
<Columns>
<asp:BoundField DataField="nome" HeaderText="nome" />
<asp:BoundField DataField="email" HeaderText="email" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="dtSource"
runat="server" SelectMethod="getUsuarioDAO"
TypeName="generics.dao.UsuarioDAO"></asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Referência: Obj 1.20
Cliquei F5 dentro da IDE para executar e mostrar o resultado final. Note na referência Obj 1.21 funcionou corretamente.
Referência: Obj 1.21
Para não delongar mais, devo parar por aqui. Aconselho que use o “debug” e passe por todas as linhas verificando o que está sendo feito sem mesmo digitar um linha de código na página .ASPX.
Espero ter ajudado de alguma forma, qualquer dúvida favor entrar em contato através do e-mail mauricio@aspneti.com.
Livros Publicados:
Mauricio Junior
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2022 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI