quinta-feira, 5 de janeiro de 2017

Enum com todas as UF's do Brasil e métodos para popular combos.

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.

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)