Lista över världens länder med .NET
Eftersom lokaliserings-funktionerna i ASP.NET är baserade på kulturer (MSDN:CultureInfo) kan det vara lite knepigt att generera en lista över alla världens länder.
Om man även vill ha dem i bokstavsordning får man se till att sortera dem själv. Jag la till alla länderna som nycklar i en SortedList, eftersom denna typ av datasamling automatiskt sorteras efter värdet i nycklarna.
Jag visar länderna och deras landskoder i en DropDownList som läggs till på .aspx-sidan.
I kodfilens Page_Load-event binder jag denna DropDown till en DataView.
{
if((!Page.IsPostBack)
{
ddlCountry.DataSource = GetAllCountriesDataView();
ddlCountry.DataBind();
}
}
Funktionen för att skapa datakällan ser ut så här:
{
DataTable objTable = new DataTable("Countries");
objTable.Columns.Add("CountryName", typeof(string));
objTable.Columns.Add("CountryCode", typeof(string));
DataRow objDataRowTitle = objTable.NewRow();
objDataRowTitle["CountryCode"] = 0;
objDataRowTitle["CountryName"] = "Välj land";
objTable.Rows.InsertAt(objDataRowTitle, 0);
//Skapa en SortedList för att spara alla länderna med tillhörande landskoder
SortedList slAddedCountries = new SortedList();
//Skapa en array av CultureInfo från alla kulturer
//Vi använder SpecificCultures men NeutralCultures är ett annat alternativ
CultureInfo[] arrayAllCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
try
{
foreach (CultureInfo ci in arrayAllCultures)
{
string country = new RegionInfo(ci.LCID).EnglishName;
string countryCode = ci.Name.Substring(3, 2);
if (!slAddedCountries.ContainsKey(country))
{
//Spara landets namn som nyckel och landskoden som värde
slAddedCountries.Add(country, countryCode);
}
}
//Lägg till länder som saknas
//Cypern
slAddedCountries.Add("Cyprus", "CY");
//Loopa igenom SortedList och vi får länderna i bokstavsordning
foreach (DictionaryEntry de in slAddedCountries)
{
Trace.Write("-"+de.Key);
DataRow objDataRow = objTable.NewRow();
objDataRow["CountryCode"] = de.Value;
objDataRow["CountryName"] = de.Key;
objTable.Rows.Add(objDataRow);
}
}
catch (Exception objException)
{
Trace.Warn("BindCultureSelector() Fel!", objException.Message);
}
finally
{
}
return objTable.DefaultView;
}
Här kommer ett del av den html-kod som skapas med de länder som ligger runt Sverige (i bokstavsordning alltså).
<option value="ES">Spain</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="-S">Syria</option>
<option value="TW">Taiwan</option>
<option value="TH">Thailand</option>
<option value="TT">Trinidad and Tobago</option>
Inte helt självklart alltså. Det går säkert att göra på något bättre sätt men detta är den bästa lösning jag kommit på. Annars kan man ju prova med en fristående databas över länder, t ex från GeoNames.
Uppdatering: Märkte att Cypern inte är med i ramverket av någon anledning. Konstigt eftersom landet blev självständigt 1960. Jag har lagt till en extra rad i koden som lägger till Cypern manuellt.
Comments
Code Odyssey » Ett annat sätt att lista länder med .NET Wrote:
27:e Maj 2007
Pontus Bremdahl Wrote:
4:e Augusti 2007
Pontus Bremdahl Wrote:
4:e Augusti 2007
Jesper Wrote:
4:e Augusti 2007
Tags