Generics usando Object DataSource
Descrição do artigo publicado no aspneti.com, cada artigo com seu resumo
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 { 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
PĂĄgina ASPX
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)
|
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) |
ReferĂȘncia: Obj 1.11 |
|
<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,
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
Subscribe ecode10.com
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.
Log In