PROGRAMANDO EM ASP.NET

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Generics usando Object DataSource



Data Publicação: 3/9/2006 0:07:46
Total de visualizações: 6353

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


 

         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

 

 

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, 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

www.aspneti.com

www.mauriciojunior.org



Total de visualizações: 6353
voltar   comente  subir


Comentários:


Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Ajax parte II
Pesquisa de Mestrado, pedido de ajuda
Concurso Office
Trabalhando com STORED PROCEDURE
Tech Fest 2009
UPLOAD – Enviando imagem pela Internet
WebServices usando soapHeader
DataGrid Mobile
Vídeo - Microsoft Surface: The Power
Vem ai a semana de Interoperabilidade
Sistema de Login com ASP 3.0 usando três camadas – Parte I
Ajax com Visual Studio.NET 2005
Treinamento VSTS
Java J2EE – Primeiro Passo
IsAlpha
Torne-se Autor de Artigos
Windows Form - Retornando valor entre formulários
Certificação - Segunda Chance
Heroes {Community} Launch - Brasilia/DF
GridView - Valor total no footer
Convite de Lançamento do Windows 7
Instalar o Windows Marketplace no celular
Nem tudo é o que parece!
Novo Firefox 3.0 - o chamado Minefield
Você tem boa postura no trabalho?
Tudo Sobre DataGrid - (ASP.NET e C#)
Trabalhando com LinkButton dentro do Gridview
Vídeo - Sistema de Atendimento de Clientes
IsDecimal
Criando uma aplicação de uma maneira nova para melhor publicação
Escrever log de erro e warning
IsAlphaNumeric
II Encontro .NET em Brasília
Certificação com Segunda Chance
Artigo Criando RSS Xml para o Seu Próprio Site
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 131
Artigos:  749
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC