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