Llenar un combo con países utilizando System.Globalization

No siempre es necesario tener una tabla con países en una aplicación, por ejemplo, imaginate que te piden diseñar un formulario (Nombre, apellidos, pais...) para enviar una solicitud por correo electrónico y en los requerimientos del cliente entra el no utilizar DB pero no quiere que el formulario este abierto a errores de introducción de datos por parte del usuario en datos como el país..., y puedes pensar:

¿Y voy a tener que llenar el combo manualmente con todos los paises?

La respuesta es: NO

En NET disponemos de un espacio de nombres System.Globalization que nos ayuda a resolver este tipo de tareas y para este ejemplo 2 clases:

CultureInfo Class

RegionInfo Class

En el ejemplo que os presento, (Si lo probáis) os daréis cuenta que se repiten paises y no es que este mal. Eso se debe a que para un mismo país existen regiones diferentes por hablar diferente idioma, aunque el nombre de la región que se muestra es el del país, por ejemplo España (ES y ES-ES) tiene a parte del Español otros 3 idiomas reconocidos (Euskera EU-ES, Gallego GL-ES y Catalán CA-ES) , por eso he puesto al lado del nombre del país la cultura neutra y específica, eso sí, se puede mostrar sólo el país de cultura neutra y listo pero en el ejemplo he querido mostrarlo así.

   1:  public partial class _Default : System.Web.UI.Page 
   2:  {
   3:      protected void Page_Load(object sender, EventArgs e)
   4:      {
   5:          List<RegionInfo> regiones = new List<RegionInfo>();
   6:   
   7:          foreach (CultureInfo cultura in 
   8:                   CultureInfo.GetCultures(CultureTypes.FrameworkCultures))
   9:          {
  10:              try
  11:              {
  12:                  RegionInfo region = new RegionInfo(cultura.Name);
  13:                  regiones.Add(region);
  14:              }
  15:              catch { }
  16:          }
  17:          regiones.Sort(new OrdenacionCulturas());
  18:   
  19:          foreach (RegionInfo region in regiones)
  20:          {
  21:              ddlCulturas.Items.Add(new ListItem(region.DisplayName + 
  22:                  String.Format("({0})",region.Name) , region.Name));
  23:          }
  24:          ddlCulturas.DataBind();
  25:      }
  26:  }
  27:   
  28:  public class OrdenacionCulturas : IComparer<RegionInfo>
  29:  {   
  30:      CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
  31:   
  32:      public int Compare(RegionInfo x, RegionInfo y)
  33:      {
  34:          return _comparer.Compare(x.DisplayName, y.DisplayName);
  35:      }
  36:  }

 A parte he creado un comparador específico para ordenar el combo alfabeticamente.

Salu2

Published 29/5/2007 9:52 por Luis Ruiz Pavón
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/05/29/llenar-un-combo-con-pa-237-ses-utilizando-system-globalization.aspx

Comentarios

# re: Llenar un combo con países utilizando System.Globalization

Muy interesante Luis.

Y si los quieres obtener en un idioma concreto (si no tienes el idioma en automático como indico aquí: http://www.jasoft.org/blog/PermaLink,guid,659bc8a5-5f82-43c9-9379-8127b4e90bd7.aspx) puedes poner lo siguiente antes de nada:

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

para obtenerlos en inglés de EEUU y lo mismo para cualquier otro idioma.

saludos

JM.

Wednesday, May 30, 2007 5:34 PM por José M. Alarcón Aguín

# re: Llenar un combo con países utilizando System.Globalization

Me lo apunto Jose ;)

Salu2

Wednesday, May 30, 2007 6:13 PM por Luis Ruiz Pavón

# re: Llenar un combo con países utilizando System.Globalization

Excelente artículo!!!

Tuesday, July 31, 2007 4:42 PM por Mariano

# re: Llenar un combo con países utilizando System.Globalization

Gracias Mariano!!!

Wednesday, August 29, 2007 2:32 PM por Luis Ruiz Pavón

# re: Llenar un combo con países utilizando System.Globalization

sera que prodias colocar los ejemplos tambien en vb y no solo en c#

Friday, January 04, 2008 2:54 PM por Safiro

# re: Llenar un combo con países utilizando System.Globalization

Pues ese trabajo lo dejo para tí ;) puedes utilizar:

labs.developerfusion.co.uk/.../csharp-to-vb.aspx

Salu2

Tuesday, January 08, 2008 12:13 PM por Luis Ruiz Pavón