Recentemente eu publiquei no meu blog
uma maneira de dar descrições amigáveis a enums e a popular combos com essas descrições.
Esta classe que eu fiz abaixo, UnidadeFederacao.cs, usa as extensões e helpers que eu fiz para enums e tem dentro dela todas as UF's do nosso país com descrições amigáveis (os nomes dos estados).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using VtrFramework.Extensions;
namespace VtrFramework.Domain
{
/// <summary>
/// uma classe com um enum com todas as unidades da federação e um conjunto de métodos para popular listas e combos com esses enums
/// está em português porque é muito característica do Brasil
/// </summary>
public class UnidadeFederacao
{
#region public properties
/// <summary>
/// id do elemento, correspondente a ordem dele no enum
/// </summary>
public int Id {get; set;}
/// <summary>
/// sigla da unidade
/// </summary>
public string Sigla {get; set;}
/// <summary>
/// nome da unidade
/// </summary>
public string Nome {get; set;}
#endregion
#region public static methods
/// <summary>
/// Obtém uma lista dos elementos do Enum em si
/// </summary>
/// <returns>list of UnidadeFederacaoSigla</returns>
public static List<UnidadeFederacaoSigla> GetUnidadeFederacaoSiglaList()
{
var values = Enum.GetValues(typeof(UnidadeFederacaoSigla)).Cast<UnidadeFederacaoSigla>();
return values.ToList<UnidadeFederacaoSigla>();
}
/// <summary>
/// obtém uma lista de elementos UnidadeFederacao, que é representado através de uma classe, tem id numérico e o nome completo
/// </summary>
/// <returns></returns>
public static List<UnidadeFederacao> GetUnidadeFederacaoList()
{
return (from v in UnidadeFederacao.GetUnidadeFederacaoSiglaList()
select new UnidadeFederacao
{
Id = (int) v,
Sigla = v.ToString(),
Nome = v.ToText()
}).ToList<UnidadeFederacao>();
}
/// <summary>
/// [WebForms]preenche um combo webforms com as unidades da federação
/// permite que se crie combos onde a descrição é o estado e o value é a UF,
/// ou a descrição é a UF e o value é um id numérico
/// </summary>
/// <param name="ddl">o combo</param>
/// <param name="text">o que vai ser o text d combo</param>
/// <param name="value">o que vai ser o value do combo</param>
/// <param name="primeiroVazio">indica se o primeiro item deve vir vazio</param>
/// <param name="placeholderPrimeiroVazio">indica o placeholder do primeiro item</param>
/// <param name="valorPrimeiroVazio">o valor do primeiro item, caso permita vazio, pode ser 0, String.Empty ou null</param>
public static void PopulaCombo(DropDownList ddl, string text = "Nome", string value = "Sigla", bool primeiroVazio = true, string placeholderPrimeiroVazio = "Escolha um Estado", string valorPrimeiroVazio = "")
{
ddl.DataTextField = text;
ddl.DataValueField = value;
ddl.DataSource = UnidadeFederacao.GetUnidadeFederacaoList();
ddl.DataBind();
if (primeiroVazio)
{
ddl.Items.Insert(0, new ListItem(placeholderPrimeiroVazio, valorPrimeiroVazio));
}
}
/// <summary>
/// [WebForms]preenche um combo webforms com as unidades da federação
/// permite que se crie combos onde a descrição é o estado e o value é a UF,
/// ou a descrição é a UF e o value é um id numérico
/// </summary>
/// <param name="ddl">o combo</param>
/// <param name="map">uma expressão lambda que papeia um UnidadeFederacao para um ListItem</param>
/// <param name="primeiroVazio">indica se o primeiro item deve vir vazio</param>
/// <param name="placeholderPrimeiroVazio">indica o placeholder do primeiro item</param>
/// <param name="valorPrimeiroVazio">o valor do primeiro item, caso permita vazio, pode ser 0, String.Empty ou null</param>
public static void PopulaCombo(DropDownList ddl, Func<UnidadeFederacao, ListItem> map, bool primeiroVazio = true, string placeholderPrimeiroVazio = "Escolha um Estado", string valorPrimeiroVazio = "")
{
if (primeiroVazio)
{
ddl.Items.Add(new ListItem(placeholderPrimeiroVazio, valorPrimeiroVazio));
}
foreach (var v in UnidadeFederacao.GetUnidadeFederacaoList())
{
ddl.Items.Add(map(v));
}
}
#endregion
#region enum UnidadeFederacaoSigla
/// <summary>
/// enum com as UF's de fato
/// </summary>
public enum UnidadeFederacaoSigla
{
[Text("Acre")]
AC,
[Text("Alagoas")]
AL,
[Text("Amapá")]
AP,
[Text("Amazonas")]
AM,
[Text("Bahia")]
BA,
[Text("Ceará")]
CE,
[Text("Distrito Federal")]
DF,
[Text("Espirito Santo")]
ES,
[Text("Goiás")]
GO,
[Text("Maranhão")]
MA,
[Text("Mato Grosso")]
MT,
[Text("Mato Grosso do Sul")]
MS,
[Text("Minas Gerais")]
MG,
[Text("Pará")]
PA,
[Text("Paraiba")]
PB,
[Text("Paraná")]
PR,
[Text("Pernambuco")]
PE,
[Text("Piauí")]
PI,
[Text("Rio de Janeiro")]
RJ,
[Text("Rio Grande do Norte")]
RN,
[Text("Rio Grande do Sul")]
RS,
[Text("Rondônia")]
RO,
[Text("Roraima")]
RR,
[Text("Santa Catarina")]
SC,
[Text("São Paulo")]
SP,
[Text("Sergipe")]
SE,
[Text("Tocantis")]
TO
}
#endregion
}
}
Esta classe faz parte de um pacote maior, um framework que estou fazendo para aplicações web (geralmente Web Forms) simples, pequenas e data - centric. Em breve farei um post explicando o porque dessa decisão.
Boa tarde, meu nome é Jiolasio, gostaria de saber como eu faço pramim reaproveitar esse codigo seu no meu projeto java pois criei um enum parecido com esse e na hora da edição não consigo trazer os dados correto, exemplo se for alterar a cidade Barreiras,BA, não traz a Uf correta
ResponderExcluir