Igara - Nota Fiscal Eletrônica
quinta-feira, 29 de julho de 2010
Busca  
Porta 80 Web Hosting
 :: Acessibilidade
Ir para conteúdo principal: ALT + 1
 :: Participe
Seja um autor de CD/DVD de Treinamento
Publique um artigo
Publique uma oportunidade
Publique uma notícia
Publique um curso
Publique uma dica
Publique um código
 :: Informativo
Receba nossos informativos por e-mail.
E-mail:   
 
Digite a palavra abaixo:  
 
 
 :: Oportunidades
Cadastrar oportunidades
Gerenciar suas oportunidades
Cadastrar nova empresa
 :: Especiais
Básico de C++
C++ Builder
Curso ASP.NET 3.5 em VB.NET e C#
Guia Prático de HTML
Testes com Visual Studio Team System 2008
 :: Desenvolvimento
ActionScript
ADO.NET
ASP
ASP.NET
Automação Comercial
C#
C/C++
Coldfusion
CSS
Delphi
Disp. Móveis
HTML
Java
Javascript
LSL (Second Life)
Modelagem
PHP
Python
Sharepoint
Silverlight
SQL
VBA (Office)
Visual Basic
Visual Basic .NET
Visual Fox Pro
WCF/WPF
Web Services
XML
 :: Infra
BizTalk Server
CRM
Exchange Server
ForeFront / Antigen / IAG
Interoperabilidade
ISA Server
Linux
MOF
MS Dynamics CRM
Network
OCS / LCS
Outlook
Powershell e Scripts
Redes
Segurança
System Center e Gerenciamento
Virtualização
Windows
Windows Server
 :: Banco de Dados
Access
Caché
Firebird
Interbase
MySQL
Oracle
SQL Server
Sybase
 :: Gerência
Arquitetura
Ciclo de Vida de Desenvolvimento
Controle de Versão
Estimativas
Metodologias
MOF
Qualidade e Testes
 :: Design
Corel
Flash
Photopaint
Photoshop
 :: Livros
Análise Sistemas
Aplicativos
Banco de Dados
Certificação
Design e CAD
Gerência
Hardware
Internet
Programação
Programação Web
Rede
Segurança
Servidores
Sistemas Operacionais
 :: CDs/DVDs
Desenvolvimento
Infra
Design
 :: E-Books
.NET 2.0 (VS 2005)
.NET 1.1 (VS 2003)
SQL Server
Excel 2007
Excel 2003
Access 2003
ASP 3.0
Delphi
Java
Artigos


MVP Profile
ASP.NET 2.0 - Explorando o GridView
Por: Israel Aéce
[Entre em contato com o autor ]
Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
ASP.NET 2.0 - Explorando o GridView
Publicado em: 10/08/2005

Neste artigo mostrarei o novo controle do ASP.NET 2.0, chamado GridView. Esta é uma versão muito melhorada do DataGrid das versões 1.x do ASP.NET, contendo uma série de vantagens, principalmente no que diz respeito à agilidade no desenvolvimento, ganhando assim uma enorme produtividade.

As melhorias vão desde as formas de carregarmos o GridView até funcionalidades inexistentes nas versões anteriores, as quais necessitávamos escrever muito código para atender algo mais específico. Grandes melhorias foram criadas, como por exemplo: novos tipos de colunas, ordenação e paginação de registros sem a escrita de nenhuma linha de código, entre outras.

Veremos no decorrer deste artigo essas novas funcionalidades, que estão cada uma delas, separadas por assunto, relacionadas abaixo:

Conteúdo

  • Objetos de DataSource
    A nova versão do .NET Framework disponibiliza diversos tipos de controles para facilitar o acesso aos dados e fazer a ponte até o controle que será exibido no cliente. Veremos neste tópico dois grandes controles: SqlDataSource, ObjectDataSource e o XmlDataSource, que irão nos proporcionar uma grande facilidade, independentemente de onde estamos resgatamos os dados, seja diretamente de um banco de dados ou mesmo de alguma função de uma classe qualquer.

  • Tipos de Colunas
    Com esta nova versão vários tipos de colunas foram criadas para facilitar o uso do GridView quando vinculado à nossa fonte de dados; colunas que antes precisávamos de uma TemplateColumn para alcançar o resultado esperado e que hoje estão presentes para utilizarmos. Este tópico abordará a utilidade e como configurar cada uma dessas colunas.

  • Habilitando a Ordernação de Registros
    Este tópico irá demonstrar a forma simples de como criar a ordenação de colunas do controle GridView utilizando os objetos SqlDataSource e ObjectDataSource.

  • Habilitando a Paginação de Registros
    A paginação é uma característica interessante quando trabalhamos com um grande volume de dados em uma página ASP.NET, e uma técnica que se não for bem utilizada pode causar uma baixa performance na aplicação. Veremos neste tópico as formas de como trabalhar com esta funcionalidade utilizando o GridView.

  • Formatando o GridView
    Analisaremos neste tópico como formatar o GridView utilizando os temas que já estão embutidos, por padrão, no ASP.NET. Além disso, o tópico abordará como customizar uma determinada linha de acordo com um valor da fonte de dados e formatar os valores de cada coluna.

  • Sumarizando Valores
    Neste tópico veremos a forma que é utilizada para sumarizar um valor de uma coluna qualquer (desde que seja do tipo numérica) na seção Footer do controle GridView.

  • Exibindo Imagens
    Há ocasiões que queremos exibir no controle GridView imagens que estão na base de dados. Na versão anterior do ASP.NET tínhamos que criar um TemplateColumn para essa finalidade. Já no GriView, isso não é preciso, pois existe um tipo de coluna específica para isso, chamada de ImageField.

  • Exibindo Detalhes de um Registro
    Quando temos uma listagem de registros em um controle GridView, muitas vezes nem todos os campos são exibidos nele por questões de layout. O ASP.NET 2.0 fornece um controle chamado DetailsView, que veremos neste tópico a forma de trabalhar este controle em conjunto com o GridView.

  • Editando Registros
    Além de exibir dados, o controle GridView (assim como é possível utilizando o DataGrid do ASP.NET 1.x) permite a edição de registros "in-place", ou seja, podemos editar os registros no mesmo local em que os mesmos estão sendo exibidos no GridView. Esta seção abordará esta funcionalidade.

  • Excluindo Registros
    Além da edição "in-place" o controle GridView ainda nos fornece a possibilidade de excluir um determinado registro do mesmo e conseqüentemente da fonte de dados. Veremos neste tópico as formas de como podemos fazer isso.

  • Utilizando Template Columns
    Apesar de todas essas funcionalidades que descrevemos detalhadamente acima, há ocasiões que estas não satisfazem uma determinada necessidade. É neste momento que a coluna do tipo Template tem a sua utilidade, pois podemos customizá-la de acordo com a necessidade da aplicação. Veremos neste tópico a forma de como trabalhar com elas.

  • Outras Funcionalidades
    Este tópico abordará outras características interessantes sobre o controle GridView e, além disso, os eventos que fazem parte dele.

Download do Código Fonte

Como os projetos estão na mesma solução, você pode definir qual deles vai quer iniciar quando você pressionar Ctrl + F5. Independente de qual dos projetos você escolha, uma página Default.aspx será visualizada no browser com o índice do artigo (Visual Basic .NET | Visual C#). Vale lembrar também que talvez precise ajustar o path do arquivo *.mdf (base de dados), pois isso depende do local onde você executa o projeto.

É muito comum trabalharmos com acesso a dados em qualquer tipo de aplicação, seja Windows, Web, Web Service, etc., e com isso, escrevemos diversos tipos de códigos para diversas operações, como por exemplo:

  • paginação
  • habilitar a ordenação
  • exibição de registro detalhado
  • edição
  • exclusão

Para que conseguíssemos desenvolver estas funcionalidades na versão anterior do ASP.NET 1.x, tínhamos que escrever bastante linhas de códigos. Nada muito exagerado, porém de certa forma por muitas vezes o código era redundante.

Como estas tarefas são bastante utilizadas em nosso dia-a-dia, a Microsoft criou controles do tipo Data Bound para não precisarmos ir diretamente ao código para criar tais funcionalidades. Esses controles são: SqlDataSource, ObjectDataSource e o XmlDataSource.

Esses controles são totalmente compatíveis com o controle que é tema deste artigo, o GridView, permitindo com esta integração, uma grande facilidade em criar aplicações que acessam e manipulam os dados de forma bem fácil e intuitiva (através das Smart Tags), permitindo assim atingir também desenvolvedores iniciantes que ainda não estão à vontade trabalhando diretamente com código.

Os controls Data Bound encapsulam a maioria das operações, que antes precisavam ser desenvolvidas para diferentes repositórios de dados. Isso tira a preocupação de definir e/ou gerir a conexão com a base de dados, a query e seus respectivos parâmetros que serão utilizados. Através de propriedades podemos especificar seus devidos valores em design-time.

Abaixo vemos a finalidade de cada um desses controles:

  • SqlDataSource: Fornece acesso à uma base de dados SQL Server.

  • ObjectDataSource: Fornece acesso à um determinado método de uma alguma classe. Estas classes geralmente encapsulam o acesso à base de dados, ou qualquer repositório, retornando uma coleção de objetos que deve ser apresentada ao usuário.

  • XmlDataSource: Fornece acesso e manipulação à um arquivo XML.

Abaixo abordaremos cada um desses controles detalhadamente.

SqlDataSource

Como já vimos, este controle é responsável por encapsular a manipulação dos dados de uma base de dados SQL Server. Temos nele propriedades essencias, como por exemplo, os comandos SelectCommand, InsertCommand, DeleteCommand e UpdateCommand, que é onde definimos os comandos (queries ou Stored Procedures) que serão executadas para cada ação.

Podemos definir estas propriedades via design (IDE), através da janelas de propriedades do Visual Studio .NET 2005 ou declarativamente no código HTML da página ASPX. Utilizando a IDE do Visual Studio .NET 2005 existem as chamadas Smart Tags, que são uma espécie de "Wizard", onde podemos configurar passo a passo cada uma dessas propriedades, habilitando inclusive uma opção para manipular as colunas que queremos exibir ao usuário.

Depois de arrastar um SqlDataSource para o nosso WebForm, haverá um botão no canto superior direito deste que, ao clicar, um wizard é exibido para fazermos as configurações. Abaixo a Figura 1 ilustra este processo:

Figura 1 - Utilizando as Smart Tags para configuração.

Ao clicar em Configure Data Source..., uma nova janela será aberta informando as configurações à serem efetuadas para o funcionamento do objeto SqlDataSource. Isso inclui desde a escolha do banco de dados, passando pela query (ou Stored Procedure) que será executada. Há uma opção chamada Advanced que, geramos automaticamente os comandos de Insert, Delete e Update (semelhante ao que já fazemos atualmente com o Dataset e DataAdapter). As imagens abaixo ilustram este processo passo à passo:

Figura 2 - Definindo o banco de dados a ser utilizado.

Figura 3 - Gerando as queries ou Stored Procedures para as operações de CRUD.

Figura 4 - Esta opção é habilitada quando clicamos no botão Advanced... da figura anterior,
onde definimos se os comandos de CRUD serão ou não gerados automaticamente.

É importante informar que os comandos gerados automaticamente são baseados no comando de seleção. Logo, os campos que são informados na seleção refletem nos comandos de inserção e atualização. Veremos abaixo o código HTML correspondente ao nosso objeto SqlDataSource e o controle GridView, gerado em nosso arquivo ASPX:

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnString %>"
    SelectCommand="SELECT [UsuarioID], [Nome], [Email] FROM [Usuario]" 
    DeleteCommand="DELETE FROM [Usuario] WHERE [UsuarioID] = @original_UsuarioID" 
    InsertCommand="INSERT INTO [Usuario] ([Nome], [Email]) VALUES (@Nome, @Email)" 
    UpdateCommand="UPDATE [Usuario] SET [Nome] = @Nome, [Email] = @Email 
	WHERE [UsuarioID] = @original_UsuarioID">
    <DeleteParameters>
        <asp:Parameter Name="original_UsuarioID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="Nome" Type="String" />
        <asp:Parameter Name="Email" Type="String" />
        <asp:Parameter Name="original_UsuarioID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="Nome" Type="String" />
        <asp:Parameter Name="Email" Type="String" />
    </InsertParameters>
</asp:SqlDataSource>

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1">
</asp:GridView>
ASPX  

Como podemos ver no código HTML correspondente ao objeto SqlDataSource, os comandos são gerados com códigos T-SQL e estão devidamente em suas respectivas propriedades. Para cada comando, há uma seção no código HTML do objeto SqlDataSource que são definidos os parâmetros que serão utilizados pela query (ou Stored Procedure), incluindo o seu nome e tipo de dado.

Depois de completamente configurado o objeto SqlDataSource, o definimos como a fonte de dados para o controle GridView, através da propriedade DataSourceID como vimos no código HTML acima. A imagem abaixo ilustra como definir o DataSource do GridView através da Smart Tag:

Figura 5 - Selecionando o Data Source do controle GridView.

ObjectDataSource

Este objeto destina-se também a vincular os dados ao controle GridView, mas utilizando uma função de uma classe qualquer que nos retorne uma coleção de objetos. Porém sem a necessidade de fazer diretamente via código. O processo de vinculação é também parecido com o objeto SqlDataSource em relação à forma de vínculo ao GridView; o que difere logicamente é o "Wizard" que é exibido para a configuração do mesmo.

Antes de exibir o wizard vamos montar o código que será responsável por resgatar os dados da base de dados, popular os objetos e, consequentemente, retornar uma coleção do mesmo. Abaixo é exibido a classe "Usuario":

using System;

public class Usuario
{
    private int _id;
    private string _nome;
    private string _email;
    private string _endereco;
    private string _cidade;
    private string _estado;
    private string _foto;

    public int ID
    {
        get { return this._id; }
        set { this._id = value; }
    }

    public string Nome
    {
        get { return this._nome; }
        set { this._nome = value; }
    }

    public string Email
    {
        get { return this._email; }
        set { this._email = value; }
    }

    public string Endereco
    {
        get { return this._endereco; }
        set { this._endereco = value; }
    }

    public string Cidade
    {
        get { return this._cidade; }
        set { this._cidade = value; }
    }

    public string Estado
    {
        get { return this._estado; }
        set { this._estado = value; }
    }

    public string Foto
    {
        get { return this._foto; }
        set { this._foto = value; }
    }
}
C# VB.NET  

Depois da classe que armazena os valores provenientes do banco de dados ou de qualquer outra repositório, vamos criar a classe que tem a finalidade de ir até o banco de dados, resgatar os dados através de objetos que já são de nosso conhecimento (SqlConnection, SqlCommand, SqlDataReader) e popular objetos do tipo Usuario, que criamos logo acima. O código abaixo é responsável por esse processo:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.Configuration;
using System.Collections.Generic;

public class Usuarios
{
    public List<Usuario> ResgataUsuarios() {
        List<Usuario> coll = new List<Usuario>();
        string connString = 
          WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand cmd = 
          new SqlCommand("SELECT UsuarioID, Nome, Email FROM Usuario", conn);
        SqlDataReader dr = null;
        try
        {
            conn.Open();
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            while(dr.Read()){
                Usuario u = new Usuario();
                u.ID = dr.GetInt32(0);
                u.Nome = dr.GetString(1);
                u.Email = dr.GetString(2);
                coll.Add(u);
            }
        }
        finally {
            if (dr != null)
                dr.Close();
        }
        return coll;
    }
}
C# VB.NET  

Como vemos, a classe Usuarios possui um método público que retorna uma lista tipificada de objetos do tipo Usuario. É este método que vamos definir no objeto ObjectDataSource, que fará todo o trabalho, desde criar a instância da classe até a chamada do método e a carga do controle GridView.

Veremos abaixo o passo à passo de como configurar o objeto ObjectDataSource com esta classe e método. Ao clicar na Smart Tag e escolhendo a Configure Data Source..., temos:

Figura 6 - Selecionando o Objeto da classe de negócios.


Figura 7 - Selecionando os métodos.

Como podemos ver na Figura 7, temos as abas para definir os métodos para Select, Update, Insert e Delete. Podemos ver que é mesmo muito semelhante a forma que trabalhamos com o objeto SqlDataSource mas, neste caso, devemos informar as funções que estão na classe de negócios responsáveis por cada ação. O código HTML resultante da criação deste objeto ObjectDataSource no arquivo ASPX é:

<asp:ObjectDataSource 
    ID="ObjectDataSource1" 
    runat="server" 
    SelectMethod="ResgataUsuarios"
    TypeName="Usuarios">
</asp:ObjectDataSource>

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="ObjectDataSource1">
</asp:GridView>
ASPX  

Uma propriedade que ainda não analisamos é a TypeName, que recebe uma String que corresponde ao nome da classe que o objeto ObjectDataSource representará, utilizando Reflection para carregar e executar o(s) método(s) deste tipo. Esta String contém o nome de um determinado tipo particalmente qualificado, que está localizado nos diretórios \Bin ou \App_Code. Se o componente estiver registrado no Global Assembly Cache - GAC a String conterá o tipo complemento, incluindo o Namespace. Vale lembrar que, se o componente estiver no Global Assembly Cache, você deverá fazer as devidas referências no Machine.Config ou Web.Config, dependendo da sua necessidade.

Nota Importante: Se por algum motivo a classe de regras de negócios tiver um construtor parametrizado, você deverá utilizar o evento ObjectCreating do objeto ObjectDataSource. Este evento é invocado antes da criação do objeto, permitindo customizar esta instanciação. Um dos parâmetros do evento, é um objeto do tipo ObjectDataSourceEventArgs, que possui uma propriedade (escrita/leitura) chamada ObjectInstance, que tem a responsabilidade de executar os métodos que foram definidos nas propriedades [XXX]Method. Quando esta propriedade é definida neste evento, o objeto ObjectDataSource irá respeitar, executando os métodos baseando-se nesta instância. O código abaixo exibe a forma de como customizar:

protected void ObjectDataSource1_ObjectCreating(object sender, 
    ObjectDataSourceEventArgs e){

    string conn =
        WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;    
    Usuarios usuarios = 
        new Usuarios(conn);
    e.ObjectInstance = usuarios;
}
C# VB.NET  

XmlDataSource

Além dos objetos que vimos anteriormente, o ASP.NET 2.0 ainda disponibiliza um objeto nas mesmas características, mas este é utilizado para acessar arquivos XML. Este objeto é chamado de XmlDataSouce. Criei abaixo um arquivo XML chamado de Usuarios.xml, que contém uma relação de usuários para demonstrar a configuração e utilização deste objeto.

<?xml version="1.0" encoding="utf-8" ?>
<Usuarios>
    <Usuario
        Nome="Israel Aece"
        Email="israel@projetando.net"
        Cidade="Valinhos">    
    </Usuario>
    <Usuario
        Nome="Claudia Fernanda"
        Email="claudia@projetando.net"
        Cidade="Valinhos">
    </Usuario>
    <Usuario
        Nome="Juliano Aece"
        Email="juliano@projetando.net"
        Cidade="Valinhos">
    </Usuario>
    <Usuario
        Nome="Carlos Bonna"
        Email="bonna@projetando.net"
        Cidade="Campinas">
    </Usuario>
</Usuarios>
XML  

Depois do arquivo XML criado, vamos definí-lo como a fonte de dados de controle GridView utilizando o objeto XmlDataSource. A figura abaixo exibe como configurá-lo:

Figura 8 - Configurando o objeto XmlDataSource.

No campo Data File (campo obrigatório) definimos o caminho do arquivo que queremos que o objeto XmlDataSource carregue. Já no campo Tranform File você pode definir opcionalmente um arquivo com os estilos (*.xsl) para que, se necessário, você altere a estrutura do arquivo XML. O código HTML gerado por este objeto é apresentado abaixo:

<asp:XmlDataSource 
    ID="XmlDataSource1" 
    runat="server" 
    DataFile="~/Usuarios.xml">
</asp:XmlDataSource>

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="XmlDataSource1">
</asp:GridView>
ASPX  

Tipos de Parâmetros

Quando utilizamos algum objeto de DataSource, temos ainda uma seção dentro deles que não exploramos. Esta seção é definida através dos elementos FilterParameters, SelectParameters, InsertParameters, DeleteParameters e UpdateParameters. É através deles que passamos para a query, Stored Procedure ou método quando for uma classe de negócios os valores para os parâmetros que são necessários para efetuar a operação corretamente.

Dentro desta seção podemos definir os parâmetros que serão utilizados, porém customizando-os de acordo com a sua origem, ou seja, podemos ter parâmetros provenientes de QueryStrings, variáveis de sessão, Cookies, controles do formulário, entre outros.

Para cada um destes tipos de parâmetros existe uma classe específica que é herdada diretamente da classe Parameter que está contida no namespace System.Web.UI.WebControls. A classe Parameter fornece um mecanismo para preencher os parâmetros necessários na query, Stored Procedure ou classe de negócios. É esta a classe base para todos os tipos de parâmetros do ASP.NET.

Vejamos abaixo os tipos de parâmetros suportados pelo ASP.NET, que são classes derivadas da classe Parameter:

Classe Descrição
ControlParameter Este tipo de parâmetro é responsável por resgatar um determinado controle do WebForm através da propriedade ID que deve ser passada para este parâmetro através da propriedade ControlID. Outra propriedade essencial à este tipo de parâmetro é a PropertyName, na qual você deverá informar qual é a propriedade do controle que o ASP.NET deverá recuperar o valor. Abaixo é listado os controles e suas respectivas propriedades que são utilizadas neste cenário:
  • Label.Text
  • TextBox.Text
  • ListControl.SelectedValue
  • CheckBox.Checked
  • Calendar.SelectedDate
  • DetailsView.SelectedValue
  • GridView.SelectedValue
  • TreeView.SelectedValue
  • FileUpload.FileBytes

CookieParameter Neste caso é passado ao parâmetro o valor contido dentro de um objeto do tipo HttpCookie. Deve-se informar através da propriedade CookieName o nome do Cookie à ser recuperado.
FormParameter Define o valor do parâmetro com o valor que está contido dentro de um controle HTML. Deve-se informar através da propriedade FormField o nome do controle HTML à ser recuperado.
ProfileParameter Define o valor do parâmetro com o valor que está contido dentro de uma propriedade do objeto Profile. Deve-se informar através da propriedade ParameterName o nome da propriedade do objeto Profile à ser recuperado.
QueryStringParameter Define o valor do parâmetro com o valor que está contido dentro de uma QueryString. Deve-se informar através da propriedade QueryStringField o nome da QueryString à ser recuperado.
SessionParameter Define o valor do parâmetro com o valor que está contido dentro de uma variável de sessão. Deve-se informar através da propriedade SessionField o nome da variável de sessão à ser recuperado.

Como todos esses parâmetros herdam da classe Parameter, os mesmos contém uma propriedade chamada DefaultValue que utilizamos para definir um valor padrão para quando o valor, controle ou propriedade dos respectivos parâmetros não estiverem disponíveis ou forem inválidos.

Abaixo veremos a utilização de dois desses parâmetros: o ControlParameter e o QueryStringParameter. O cenário do exemplo é resgatar os usuários baseando-se em um Estado (UF) informado pelo usuário, através de um TextBox (Figura 9) e QueryString (Figura 10):

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnString %>"
    SelectCommand="SELECT [Nome], [Email] FROM [Usuario] WHERE Estado = @UF">
    <SelectParameters>
        <asp:ControlParameter 
            ControlID="txtUF" 
            PropertyName="Text"
            Name="UF" />
    </SelectParameters>
</asp:SqlDataSource>
ASPX  

Figura 9 - Utilizando o parâmetro do tipo ControlParameter.

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnString %>"
    SelectCommand="SELECT [Nome], [Email] FROM [Usuario] WHERE Estado = @UF">
    <SelectParameters>
        <asp:QueryStringParameter 
            QueryStringField="UF" 
            Name="UF" />
    </SelectParameters>
</asp:SqlDataSource>
ASPX  

Figura 10 - Utilizando o parâmetro do tipo QueryStringParameter.

Como podemos certificar, o valor do parâmetro (independente de onde está vindo) é passado, neste caso, para a query definida na propriedade SelectCommand utilizando o objeto SqlDataSource.

Eventos

Como estes objetos derivam de uma classe em comum (DataSourceControl) o mesmos tem alguns eventos semelhantes. Veremos cada sum desses eventos e suas respectivas descrições listadas na tabela abaixo:

Evento Descrição
Deleted Ocorre quando a exclusão é completada.
Deleting Ocorre antes de executar a operação de exclusão.
Filtering Ocorre antes de executar a operação de filtro.
Inserted Ocorre quando a inserção é completada.
Inserting Ocorre antes de executar a operação de inserção.
Selected Ocorre quando a seleção é completada.
Selecting Ocorre antes de executar a operação de seleção.
Updated Ocorre quando a atualização é completada.
Updating Ocorre antes de executar a operação de atualização.
ObjectCreated* Ocorre depois que o objeto especificado na propriedade PropertyName for criado.
ObjectCreating* Ocorre antes que o objeto especificado na propriedade PropertyName seja criado.
ObjectDisposing* Ocorre antes que o objeto especificado na propriedade PropertyName seja destruído.

* Eventos pertencentes apenas ao objeto ObjectDataSource.

Ao contrário das versões anteriores, o controle GridView nos fornece uma grande quantidade de tipos de colunas, que antes só conseguíamos através da criação manual de uma Template Column. Para que o desenvolvedor perca não tempo na criação destes tipos de colunas a Microsoft já implementou no GridView alguns novos tipos de colunas que usamos com bastante frequencia nas aplicações atuais. As mesmas estão listadas abaixo:

  • BoundField
  • CheckBoxField
  • HyperLinkField
  • ImageField
  • ButtonField
  • CommandField
  • TemplateField

Voltando ao DataGrid da versão 1.x do ASP.NET, tínhamos que ir até o Property Builder para definirmos as colunas que queríamos que fossem apresentadas neste controle. Atualmente temos o que chamamos de Smart Tags que nos auxiliam, disponibilizando um acesso rápido e intuitivo às principais propriedades dos controles. É através destas Smart Tags que abrimos a janela para criarmos e editarmos as colunas que queremos em nosso controle GridView. A figura abaixo ilustra isso:

Figura 1 - Definindo as colunas do GridView.

Ao clicar em Edit Columns... na Smart Tag uma nova janela é aberta, e então definiremos as colunas do nosso GridView. Na figura abaixo conseguimos visualizar, envolvidas em um quadrado vermelho, os tipos das colunas mencionadas acima:

Figura 2 - Visualizando e definindo as colunas do GridView.

Dentro desta janela principal temos três importantes seções que configurarão as colunas do GridView. A figura abaixo exibe essas seções e veremos qual a finalidade de cada uma delas:

Figura 3 - Seções da Janela de colunas.

  • 1 - Exibe as colunas disponíveis para adicionarmos no GridView.

  • 2 - Exibe as colunas que já fazem parte do GridView.

  • 3 - As propriedades correspondentes a cada coluna selecionada na seção 2.

Quando já temos um controle do tipo Data Source definido, como é ilustrado na figura 3, já são listados como BoundFields os campos provenientes desta fonte, nos quais podemos também definir como uma coluna do GridView.

Para adicionarmos uma nova coluna ao GridView basta selecionar o tipo da mesma na seção 1 e clicar no botão Add. Assim a mesma aparecerá na seção 2, onde podemos ajustar e definir as propriedades na seção 3 desta janela. Também nesta seção (a número 2), temos a opção de exclusão de uma coluna, clicando no botão X. Finalmente, ainda nesta seção, temos mais dois botões onde definimos a ordem de cada coluna.

Outra opção que chama a atenção é a propriedade Auto-generate fields, que é responsável por gerar automaticamente as colunas do GridView refletindo exatamente os campos do controle Data Source informado. Há também um link chamado Convert this field into a TemplateField, que tem a finalidade de converter qualquer coluna definida no controle GridView em uma Template, que permite ao desenvolvedor manipular manualmente.

Tipos de Colunas

BoundField

Esta coluna simplesmente representa um campo da fonte de dados em uma coluna como um texto (Label) dentro do GridView. É esta a coluna padrão para todos os campos do tipo texto da fonte de dados, em caso de não defirnirmos manualmente.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:BoundField 
            DataField="UsuarioID" 
            HeaderText="UsuarioID" 
            InsertVisible="False"
            ReadOnly="True" 
            SortExpression="UsuarioID" />
        <asp:BoundField 
            DataField="Nome" 
            HeaderText="Nome" 
            SortExpression="Nome" />
        <asp:BoundField 
            DataField="Email" 
            HeaderText="Email" 
            SortExpression="Email" />
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna BoundField:

Propriedade Descrição
DataField Define a coluna da fonte de dados que será exibida.
NullDisplayText Define um valor padrão para ser exibido quando o campo da fonte de dados for nulo.

CheckBoxField

Esta coluna é um caso típico onde nas versões 1.x do ASP.NET precisávamos criar uma coluna do tipo TemplateColumn se quiséssemos exibir um valor booleano em formato de um controle CheckBox. Isso foi resolvido com a criação da coluna CheckBoxField, que representa através de um controle CheckBox um valor booleano da fonte de dados.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server"
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:CheckBoxField 
            DataField="Ativo" 
            HeaderText="Ativo" 
            SortExpression="Ativo" />
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna CheckBoxField:

Propriedade Descrição
DataField Define a coluna booleana da fonte de dados que será exibida no controle CheckBox.
Text Define um valor padrão a ser exibido como "Label" ao controle CheckBox.

HyperLinkField

Apesar desta coluna já existir na versão 1.x do ASP.NET, ela tem uma limitação: só podemos definir um único parâmetro através do Property Builder do controle DataGrid. Se por alguma situação especial precisássemos ter mais de um parâmetro definido na QueryString, tínhamos que recorrer ao código para fazer isso. Essa deficiência foi sanada nesta nova versão, onde agora podemos definir não apenas um campo da fonte de dados, mas sim um Array contendo os nomes dos campos que desejamos anexar à URL.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:HyperLinkField 
            DataNavigateUrlFields="UsuarioID,Ativo" 
            DataNavigateUrlFormatString="?ID={0}&Ativo={1}"
            DataTextField="Nome" 
            NavigateUrl="Pagina.aspx" />
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna HyperLinkField:

Propriedade Descrição
DataNavigateUrlFields Contém os nomes das colunas que serão anexadas à URL, separadas por vírgula.
DataNavigateUrlFormatString Define a String que especifica os parâmetros e suas posições na QueryString.
DataTextField Define a coluna da fonte de dados que será exibida na propriedade Text do HyperLink.
NavigateUrl Define a página de destino a qual o usuário será redirecionado ao clicar.
Text Define um valor que será exibido na propriedade Text do HyperLink.

ImageField

Como já vimos um pouco acima, este tipo de coluna também exigia a criação de uma coluna do tipo TemplateColumn nas versões anteriores do ASP.NET. A coluna ImageField veio para suprir esta necessidade, possibilitando exibir uma imagem proveniente de uma fonte de dados (seja o caminho/path ou a imagem em si).

Caso você tenha na sua fonte de dados a imagem em si ao invés de um path/caminho para um arquivo físico, você terá que criar um Handler (implementando a Interface IHttpHandler) para exibir a referida Imagem. Como isso foge do escopo deste artigo, fica registrado aqui um artigo do Dino Esposito, onde ele explica como criar e implementar este Handler.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:ImageField 
            DataImageUrlField="Foto" 
            DataImageUrlFormatString="~/Images/{0}">
        </asp:ImageField>
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna ImageField:

Propriedade Descrição
DataImageUrlField Define a coluna da fonte de dados que contém o Path da foto a ser exibida.
DataImageUrlFormatString Contém a formatação da URL para a imagem a ser exibida.

ButtonField

Este tipo de coluna representa uma coluna da fonte de dados em formato de um Button. É utilizada quando queremos executar uma ação customizada em nosso GridView ou fora dele, no qual podemos identificá-la através da propriedade CommandName que definimos para esta coluna.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:ButtonField 
            DataTextField="Nome" 
            Text="Button" 
            CommandName="Exibir" />
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna ButtonField:

Propriedade Descrição
CommandName Define uma String como uma espécie de "chave" para sabermos que botão foi clicado e, assim, executar uma determinada ação.
DataTextField Define o nome da coluna da fonte de dados que será apresentado na propriedade Text do Button.

CommandField

Representa um conjunto especial de controles que, acrescentado ao GridView, habilita-o para operações de Select, Cancel, Update, Insert e Delete para manipular os dados que foram carregados através da fonte de dados.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:CommandField 
            ShowDeleteButton="True" 
            ShowEditButton="True" 
            ShowSelectButton="True" />
    </Columns>
</asp:GridView>
ASPX  

Abaixo é mostrado uma listagem com as principais propriedades da coluna CommandField:

Propriedade Descrição
ShowCancelButton Exibe ou oculta o Button para cancelar.
ShowDeleteButton Exibe ou oculta o Button para exclusão.
ShowEditButton Exibe ou oculta o Button para edição.
ShowInsertButton Exibe ou oculta o Button para inserção.
ShowSelectButton Exibe ou oculta o Button para seleção.

TemplateField

Caso nenhuma das colunas apresentadas anteriormente satisfaça a necessidade, podemos optar pela criação de uma TemplateField ou TemplateColumn, como também é conhecida. Este tipo de coluna permite customizá-la, incluindo qualquer tipo de formatação ou controle.

O código HTML gerado na página ASPX por este tipo de coluna é exibido abaixo:

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="False" 
    DataKeyNames="UsuarioID">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:RadioButton 
                    ID="RadioButton1" 
                    runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
ASPX  





MS TechEd 2010



 

Conheça os produtos do autor Israel Aéce

Inclua um comentário sobre o artigo Topo
Elogios e críticas são muito bem vindos, porém o comentário deve ter referência ao artigo em pauta.
O portal e o autor agradecem.
Nome:    
E-mail:      
Comentários:    
Digite a palavra abaixo:  
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
 
Comentários sobre o artigo Ver Todos comentários
Boas Michael,

O que pode fazer é interceptar via evento RowDataBound, e definir o limite (MaxLenght) do TextBox, ou converter para Template, e via janela de propriedades definir normalmente.

Att,
Quem enviou: Israel Aece
Postado em: 11/9/2009 0:00:00
Maravilhoso seu artigo...Parabens !!!
Uma coisa que nao localizei e preciso muito e com urgencia é poder limitar a quantidade de caracteres dos campos no ato da edicao do registro. Ele aceita quantos caracteres a gente digitar. "Estado" por exemplo, defino 2 no banco e ele aceita um monte na edicao. Pode me ajudar?

obrigado
Quem enviou: Michael
Postado em: 10/9/2009 0:00:00
Cara! muito bom seu artigo! gostei muito e me foi de grande ajuda!
abração!

parabens pela iniciativa!
Quem enviou: Douglas
Postado em: 6/8/2009 0:00:00
Muito bom, parabéns. O Artigo me ajudou bastante
Quem enviou: Fabríco
Postado em: 30/6/2009 0:00:00
MUITO BOM!!!

Explicação bem didática
Quem enviou: CARLOS SANT ANNA
Postado em: 29/5/2009 0:00:00
Boas kamacete,

Qual WebServices está se referindo?
Quem enviou: Israel Aece
Postado em: 26/3/2009 0:00:00
olá e parabens pelo excelente documento aqui disposto!

mas gostaria de perdir que colocasses tambem as ligações a webservice.

;)
Quem enviou: kamacete
Postado em: 26/3/2009 0:00:00
Era isso mesmo...
Tinha que fazer a soma pelo .Net!
Ag, já esta tudo funcionando.

Obrigada Israel!
Quem enviou: Maressa Oliveira
Postado em: 20/2/2009 0:00:00
Boas Maressa,

Você pode efetuar esse calculo no SQL diretamente:

SELECT DataRequisicao, DATEADD(dd, Prazo, DataRequisicao) As Prazo FROM Tabela

Ou, fazer isso no próprio .NET, utilizando o evento o RowDataBound e, através do DataItem, extrair os campos da base de dados e efetuar a soma dos dias através do método AddDays.
Quem enviou: Israel Aece
Postado em: 13/2/2009 0:00:00
Olá Israel, sempre enquanto estou fazendo pesquisas encontro os seus artigos.

Vamos ver se você pode me ajudar:

Tenho um GridView, nele trago a data(da requisição) e dentre outros campos, tenho o PRAZO que é smallint.
Acontece que, eu tenho que somar a data do cadastro(requisição) com esse prazo E no GridView me aparecer uma data.
Ex:

Data da Req Prazo -> Data da Req Prazo
17/01/2009 10 -> 17/01/2009 27/01/2009

Será que você pode me ajudar?

Obrigada
Quem enviou: Maressa Oliveira
Postado em: 10/2/2009 0:00:00
Outros artigos do autor Topo
Autenticação via Claims no WCF
Detectando mudanças em objetos
Consumindo serviços REST com HttpClient
REST e o WSDL
Autenticação com WCF e jQuery
Tratando erros com jQuery e WCF
A importância do StrongName
AppFabric para desenvolvedores WCF
Utilizando jQuery para invocar Actions
Consumindo serviços WCF com jQuery
Habilitando REST em projetos WCF
Role vs. Claims
Autenticação via Claims no ASP.NET MVC
Explorando os módulos do WIF para o ASP.NET
Compressão em Serviços WCF
Autenticação via Claims no ASP.NET WebForms
Explorando o WIF
Os Elementos do Sistema de Identidade
Uma nova forma de Autenticação/Autorização
Autenticação e Autorização no ASP.NET MVC
Explorando Segurança do ASP.NET - Roles
Explorando Segurança do ASP.NET - Membership e MembershipUser
Programação Assíncrona no ASP.NET MVC
Utilizando Resources no WPF
DataBinding em WPF
Introdução aos Commands
UserName e Password em serviços WCF para Silverlight
Introdução aos Routed Events
Introdução às Dependency Properties
Threading em WPF
Serviços TCP no Silverlight
Binary Encoding no Silverlight 3.0
Granularidade de Serviços
Serviços CRUD
Novas classes para inicialização de objetos
.NET Reactive Framework
Host de Serviços em Aplicações Windows
Overloading de métodos no WCF
Internals - Proxy de serviços WCF
Limites de Tamanho e Cotas do WCF
Timeouts do WCF
A importância dos Namespaces em serviços
WCF – Roteamento de Mensagens
Persistência de dados em aplicações Silverlight
WCF - Durable Services
WCF - Polling Duplex
WCF – WS-Discovery
Compartilhando tipos entre o serviço e o cliente
WCF - MessageContracts
Por dentro da classe Message
Headers vs. Properties
Migrando de ASMX para WCF
WCF Service no IIS
WCF, IIS e Threads
UserName e Certificados
Melhorias na configuração de serviços WCF
Customizando o ServiceHost
WCF - Internals e Extensibilidade
WCF - Segurança - Autenticação e Autorização Customizadas
WCF - Introdução
WCF - Syndication
WCF - Segurança
WCF - Message Queue
WCF - Transações
WCF - Reliable Messages
WCF - Error Handling
WCF - Tipos de Mensagens
WCF - Sincronização
Por dentro da Base Classe Library - Capítulo 14 - Threading
Por dentro da Base Classe Library - Capítulo 13 - Reflection
Por dentro da Base Classe Library - Capítulo 12 - Interoperabilidade com componentes COM
Por dentro da Base Classe Library - Capítulo 11 - Criando Serviços do Windows
Por dentro da Base Classe Library - Capítulo 10 - Envio de Mensagens (E-mails)
Por dentro da Base Classe Library - Capítulo 9 - Utilizando Code Access Security – CAS
Por dentro da Base Classe Library - Capítulo 8 - Criptografia
Por dentro da Base Classe Library - Capítulo 7 - Globalização de Aplicações
Por dentro da Base Classe Library - Capítulo 6 - Serialização
Por dentro da Base Classe Library - Capítulo 5 - Manipulando o sistema de arquivos
Por dentro da Base Classe Library - Capítulo 4 - Monitoramento e depuração de aplicações
Por dentro da Base Classe Library - Capitulo 3 - Utilização de Assemblies
Por dentro da Base Classe Library - Capitulo 2 - Trabalhando com Coleções
Por dentro da Base Classe Library - Capitulo 1 - Tipos de dados e Interfaces
Por dentro da Base Classe Library - Introdução
WCF - Throttling e Pooling
WCF - Gerenciamento de Instâncias
WCF - Transferência e Codificação de Dados
WCF - Chamadas Assíncronas
WCF - Serviços RESTFul
WCF - Expondo componente COM+
WCF Partial Trust
Vídeo: Control Adapters - ASP.NET 2.0 (Para assinantes)
ASP.NET: Criando um BuildProvider
Criando novos Providers
ASP.NET Internals
Consumindo serviços WCF no AJAX
Client Application Services
Know Types em WCF
Explorando o LINQ
Boas Práticas de Programação
Tracing em serviços WCF
Integrando WCF com MembershipProvider e RoleProvider
WCF - Hosting
ASP.NET: WebParts
Entendendo e Implementando Segurança no ASP.NET 2.0
.NET 2.0 - Criando um DebuggerVisualizer
Health Monitoring - ASP.NET 2.0
Client-Side Callbacks - ASP.NET 2.0
Por dentro do ADO.NET 2.0
ASP.NET: Criando um DataGrid em Runtime
Páginas Assíncronas do ASP.NET 2.0 - Parte 1
Pré-Compilação do ASP.NET 2.0
Objeto Profile - ASP.NET 2.0 (parte 2)
Segurança - ASP.NET 2.0 - Utilizando Providers Models
ASP.NET - Validation Groups (controles de validação)
.NET Framework 2.0: Compressão de Arquivos no .NET
Objeto Profile - ASP.NET 2.0 (parte 1)
Performance em aplicações ASP.NET
Criando objetos SQL com .NET (CLR - Managed Code)
.NET: Guia Inicial do NHibernate
.NET: Creational Pattern - Builder
Somando Valores no DataGrid
Paginando Dados utilizando DataList
Behavioral Pattern – Template Method
Comparação de Sintaxe de Linguagens no .NET
Disparando o Evento SelectedIndexChanged do DropDownList dentro do DataGrid
Analisando o Microsoft PetShop 3.0
DataGrid e DataList, Arquivos e Imagens
Migrando de ASP para ASP.NET
Adicionando Registros no DataGrid
Formatando Valores em Colunas do DataGrid
Configurando uma Aplicação ASP.NET
ASP.NET - Como fazer para... Dicas de funcionalidades úteis ao dia-a-dia
Construindo uma Área Restrita em aplicativos Web
ASP.NET: Trabalhando com Arquivos
Utilizando o System.Collections.CollectionBase
IEWebControls - TabStrip e MultiPage
Criando um DALHelper (Data Application Layer - Camada de Dados)
DataGrid Editável com DropDownList e CheckBox - ASPNET
Depurando e Tratando Erros no VB.NET
Publicando uma WebApplication
Utilizando Crystal Reports no Visual Studio .NET
Validando números de CPF utilizando WEBApplication e VB.NET
Criação de Comentários e Documentação em VB.NET
Artigos relacionados Topo
Acesso a Dados com ASP.NET - Parte 4
Acesso a Dados com ASP.NET - Parte 3
Acesso a Dados com ASP.NET - Parte 2
Acesso a Dados com ASP.NET - Parte 1
Usando DataSet Tipado com ASP.NET
Gerenciador de conteúdo ASP.NET MVC 2 - Kooboo
Criando um Leitor de Arquivos em ASP.NET
Criando um Leitor de RSS em ASP.NET
Trabalhando com Update Panel no ASP.NET
Como fazer Deploy no ASP.NET 4?
Enviando Emails com ASP.NET usando System.Net.Mail
Criando editor de texto personalizado em Asp.Net
JQuery auto complete em Asp.Net
Detectando erro a todo custo
Compactação de ViewState em ASP.NET
Criando e utilizando User Controls no Silverlight
Gerando JavaScript do lado do servidor com ASP.NET
Efeitos de imagem com ASP.NET e LightBox 2
Marca d´agua em imagens usando System.Drawing
Asp.Net + Twitter sem API de terceiros
Trabalhando com Accordion
Trabalhando com o componente TabContainer
Por que alguns grupos de usuários falham?
Suggest/Autocomplete com C#, Asp.Net e jQuery
Galeria de Imagens com C#, Asp.NET e jQuery
Recorte de Imagens com C#, Asp.NET e jQuery
Curso ASP.NET 3.5 em VB.NET e C# - Relatórios com Crystal Report
Curso ASP.NET 3.5 em VB.NET e C# - Distribuindo sua Aplicação
ModalDialogExtender
Curso ASP.NET 3.5 em VB.NET e C# - Eventos da aplicação
Produtos relacionados Topo
Pacote: Promoção C# Básico (válido somente para pagamento via boleto bancário)
CD/DVD: CD de Treinamento Criando Aplicações Asp.Net em Camadas (parte integrante do portal de vídeos .Net)
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq To SQL (válido somente para pagamento via boleto bancário)
Pacote: Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq + Asp.Net
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
CD/DVD: DVD de Treinamento - Crie uma aplicação ASP.NET com LINQ TO SQL
Livro: Desenvolvendo para web usando o Visual Studio 2008
CD/DVD: DVD de Treinamento Explorando o LINQ para SQL
Pacote: Pacote: Desenvolvedor Web Kit III (4 CDs)
Pacote: Pacote: Desenvolvedor Web Kit II (3 CDs)
Pacote: Pacote: Desenvolvedor Web Kit I (2 CDs)
CD/DVD: CD de Treinamento - RAD Studio 2007 e ASP.NET 2.0 (Delphi)
Pacote: Pacote ASP.NET - 4 CDs (Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008 + ASP.NET 2.0 Básico + Um mergulho no Controle GridView do ASP.NET 2.0 + Explorando as novidades)
CD/DVD: CD de Treinamento – Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
CD/DVD: CD de Treinamento sobre ASP.NET 2.0 Básico
CD/DVD: CD de treinamento: Um mergulho no Controle GridView do ASP.NET 2.0
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento Introdução a banco de dados com SQL Server 2005 Express
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
CD/DVD: CD de Treinamento de ASP.NET 2.0 - Explorando as novidades
Livro: ASP.NET para desenvolvedores de web sites
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-Book: Tutorial de GridView no ASP.NET 2.0 (via download)
Livro: Firebird 2.0
© Copyright 2001-2010 Codeline Editora, Comércio e Tecnologia Ltda. | Política de privacidade e de uso | Anuncie | Fale conosco

» Site hospedado na Porta 80 Web Hosting «
Nossos números
Dicas: 1.314
Códigos/scripts: 279
Funções de VBScript : 90
Funções JScript : 05
Livros: 1.805
Notícias: 2.488
Artigos: 2.972
Cases: 14
Oportunidades: 4.546
Publicidade

Conheça a loja do Linha de Código.

Microsoft indica Linha de Código.

Assine a Revista Mundo .NET
Portal de Vídeos .NET - os melhores vídeos .NET estão aqui
O que você fará com o Visual Studio 2010?
Revista Codificando .Net

Siga-nos no Twitter

Linha de Código no Orkut
Fórum de discussão do portal Linha de Código
Feeds
Oportunidades
Notícias
Artigos
Artigos personalizado
       (Por assunto)
Artigos personalizado
       (Por autor)
Portal Vídeos .NET
Portal Vídeos Delphi
LC Blog
       (Onde você faz a notícia)
Promoções
Promoção Mobile com entrega via download (válido somente para pagamento via boleto bancário)
Promoção Mobile com entrega via download (válido somente para pagamento via boleto bancário)
De: R$ 189,00
Por: R$ 126,00
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção C# Básico (válido somente para pagamento via boleto bancário)
De: R$ 185,90
Por: R$ 136,00
Promoção PHP + MYSQL Intelimax (válido somente para pagamento via boleto bancário)
De: R$ 308,00
Por: R$ 219,00
Promoção Especial Infra
De: R$ 175,95
Por: R$ 136,00
CDs/DVDs
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
Por: R$ 59,00
DVD Curso de CorelDraw X4
Por: R$ 79,90
DVD Curso de Fireworks CS4
Por: R$ 49,90
DVD Curso de Indesign CS4
Por: R$ 55,00
DVD Curso de Efeitos Digitais
Por: R$ 49,90
Livros
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
De: R$ 129,00
Por: R$ 77,40
Foundation FLASH CS3 para Designers
Ciência Moderna
De: R$ 139,00
Por: R$ 83,40
Recursos Visuais na Web com PHP
Ciência Moderna
De: R$ 49,00
Por: R$ 29,40
Crie um Sistema Web com PHP 5 e AJAX - Controle de Estoque
Erica
De: R$ 99,50
Por: R$ 84,50
Crie Projetos Gráficos com Adobe Photoshop CS4, CorelDRAW X4 e Adobe InDesign CS4 - em Português
Erica
De: R$ 77,50
Por: R$ 65,80
E-Books
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Por: R$ 30,00
Manual de Estudos - Exame 70-291 - Windows Server 2003 (606 páginas) - entrega via download
Por: R$ 30,00
Dominando MS – Visio ® em 20 Passos - Melhores Práticas em Gestão de Projetos (entrega via download)
Por: R$ 30,00
MS-Project® 2007 - Melhores Práticas de Gestão de Projetos - Dominando MS – Project ® em 20 Passos (e-book com entrega via download)
Por: R$ 20,00
Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
Por: R$ 20,00
Os 10+ | Autores do dia