Polecam

.NET Blogs PL
CodeGuru


Lista krajów dla Combobox

December 7, 2009 in categories: pro by Gutek

5

Krótko, jeżeli potrzebujecie listę krajów dla combobox wystarczy wam taki o to fragment kodu:

public static Dictionary<string, string> GetCountries()
{
    var countries = new Dictionary<string, string>();

    foreach (var cultureInfo in CultureInfo.GetCultures(CultureTypes.AllCultures))
    {
        RegionInfo regionInfo = null;

        try
        {
            regionInfo = new RegionInfo(cultureInfo.LCID);
        }
        catch(Exception)
        {
            continue;
        }

        if (!countries.ContainsKey(regionInfo.TwoLetterISORegionName))
        {
            countries.Add(regionInfo.TwoLetterISORegionName, regionInfo.DisplayName);
        }
    }

    return countries.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
}

W zależności od wartości CultureTypes, liczba zwróconych krajów będzie różna od 110 do 127 (aktualnie na świecie zakłada się, że jest 195 krajów). Zaś jeżeli chodzi o tekst (wartość) to mamy do wyboru:

  • DisplayName - nazwę kraju w języku z lokalizowanego .NET;
  • EnglishName - nazwa kraju w języku angielskim;
  • NativeName - nazwa kraju w języku danego kraju.

Dla chętnych, kluczem może być wartość ThreeLetterISORegionName, jednakże na jej podstawie nie można potem utworzyć obiektu CultureInfo czy RegionInfo.




,

 

 

 

4 comments for "Lista krajów dla Combobox"

  1. Mirosław Pragłowski
    Mirosław Pragłowski Says:

    Jakoś mam "uprzedzenia" do konstrukcji tego typu:
    try { ... } catch(Exception) { continue; }

    Z czego to wynika ?
    Czyżby nie zawsze udawało się utworzyć RegionInfo na podstawie LCID ?

    • Gutek
      Gutek Says:

      Hejka,

      Tak, gdyz dla przykladu:
      Culture ID 1 (0x0001) is a neutral culture; a region cannot be created from it.
      Parameter name: culture

      Na przyklad 'en' jest natural culture, zas en-GB jest RegionalInfo.

      i cos takiego wystepuje 69 razy dla CultureTypes.AllCultures, zas dla wartosci: CultureTypes.SpecificCultures juz nie wystapi ani razu.

      Ogolnie jak juz wybierzesz sobie CultureTypes to warto sprawdzic czy Exception jest wywolywany i wrazie co wykasowac ten fragment kodu.

      Gutek

  2. Lukas Sz.
    Lukas Sz. Says:

    Niestety nie znajdziesz na tej liście wszystkich krajów.

    np. San Marino, Watykan

  3. Adam
    Adam Says:

    A dlaczego zamiast
    try
    {
      regionInfo = new RegionInfo(cultureInfo.LCID);
    }
    catch(Exception)
    {
      continue;
    }


    Nie zrobisz po prostu:
    foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))

Comments are closed

© 2008-2010 Jakub Gutkowski. Powered by BlogEngine.NET 1.5.1.14. Hosted on OrcsWeb.

Design