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