sexta-feira, 2 de maio de 2008

Bind do DropDownList com uma lista genérica

O DropDownList do ASP.NET pode fazer bind com uma lista genérica(System.Collections.Generic.List), desta forma podemos trabalhar orientado a objetos ou da forma já comum utilizando DataTable. Neste exemplo abaixo criaremos uma classe de Pessoa, criaremos uma lista genérica do tipo Pessoa e faremos o bind com o DropDownList.

Crie um novo site e adicione a classe Pessoa no diretório App_Code, conforme imagem abaixo:

Imagem 1 - Estrutura da aplicação

Coloque duas propriedades na classe pessoa, uma do tipo inteiro Codigo e outra string Nome. Como estamos utilizando o ASP.NET 3.5 podemos fazer conforme código 1:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public class Pessoa
{
public Pessoa(int codigo, string nome)
{
this.Codigo = codigo;
this.Nome = nome;
}

public int Codigo { get; set; }
public string Nome { get; set; }
}
Código 1 - Classe Pessoa(ASP.NET 3.5)

Para quem utiliza o ASP.NET 2.0 deverá escrever conforme Código 2:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public class Pessoa
{
private int codigo;
private string nome;
public Pessoa(int codigo, string nome)
{
this.Codigo = codigo;
this.Nome = nome;
}

public int Codigo
{
get
{
return codigo;
}
set
{
codigo = value;
}
}

public string Nome
{
get
{
return nome;
}
set
{
nome = value;
}
}
}
Código 2 - Classe Pessoa(ASP.NET 2.0)

Na página, adicione um DropDownList no Default.aspx, altere seu nome para ddlPessoa, conforme Imagem 2 :

Imagem 2 - Adicionando o DropDownList ddlPessoa

Visualize o CodeBehind do Default.aspx(Default.aspx.cs) e no evento Page_Load adicione o código conforme código 3, este cria uma lista de pessoas, faz as configurações necessárias no ddlPessoa e chama o método DataBind para adicionar os valores ao DropDownList.

As configurações necessárias no ddlPessoa é definir a fonte de dados que irá montar os itens, isto é feito definindo a propriedade DataSource, configuramos a lista de Pessoa. Também é necessário configurar as propriedades DataValueField e DataTextField, como cada item do nosso DataSource é uma instância de Pessoa, definimos nestes quais as propriedades de Pessoa, neste caso as propriedades Codigo e Nome.

Outra inforamção importante é que estamos usando generics é necessário adicionar o using ao namespace System.Collections.Generic:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Pessoa> listaPessoas = new List<Pessoa>();
listaPessoas.Add(new Pessoa(0, "Mateus"));
listaPessoas.Add(new Pessoa(1, "Maria"));
listaPessoas.Add(new Pessoa(2, "Jose"));

ddlPessoa.DataSource = listaPessoas;
ddlPessoa.DataValueField = "Codigo";
ddlPessoa.DataTextField = "Nome";
ddlPessoa.DataBind();
}
}

Código 3 - Código da página Default.aspx.cs

Salve tudo e execute o site, visualize também o HTML gerado.
Imagem 3 - Resultado no navegador

Referências:
http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx
http://digitalcolony.com/2008/01/bind-generic-list-to-aspnet.aspx