Här visas en funktion för att se om ett land är med i EU. Inparameter är landets ISO-landskod och den returnerar en boolean. Mer information om EU-länderna finns på Europa.eu.
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.
//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å).
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.
Vi har tidigare visat ett koncept på hur man kan göra ett bildspel i flash med bildnamn som laddas från en xml-fil. Det är ett bra sätt så att man ska slippa att gå in i flash-filen och ändra varje gång man vill byta ut bilderna.
Vi använder den rätt ofta i våra egna projekt och hittills har vi sparat meta-data för bilderna i en databas. Det har sina fördelar ifall man vill spara bildtexter eller liknande.
Men det kan bli rätt omständigt att först göra en editor för att hantera bilduppladdingen. Därför skrev jag ett litet kodstycke i C# som kollar efter bilder i en angiven mapp, och skapar en xml-fil baserat på filnamnen.
I exemplet används två variabler som är sökvägar till xml- och bildmappar. Dessa läses i vårat fall in från Web.Config
//Här finns våra xml-filer public static string strXmlRootPath = ConfigurationManager.AppSettings["XmlRootPath"];
//Här lagrar vi bilderna public static string strMediaRootPath = ConfigurationManager.AppSettings["MediaRootPath"];
if(File.Exists(strXMLPath)) { DateTime dtLastWriteTime = Convert.ToDateTime( ""+File.GetLastWriteTime(strXMLPath) ); //Skapar bara en ny fil en gång varje timme if( DateTime.Compare(DateTime.Now,dtLastWriteTime.AddMinutes(60))==1 ) { CreateSlideshowXml(); } } else { CreateSlideshowXml(); } }
public void CreateSlideshowXml() { try { string strXMLPath = strXmlRootPath + "slideshow.xml"; FileStream objFileStream = new FileStream(strXMLPath, FileMode.Create); XmlTextWriter objXmlWriter = new XmlTextWriter(objFileStream, System.Text.Encoding.GetEncoding("utf-8"));//iso-8859-1 objXmlWriter.Formatting = Formatting.Indented; objXmlWriter.WriteStartDocument(); objXmlWriter.WriteStartElement("images");
//Skapa array av alla filer i mappen för slideshow-bilder String[] strFiles = Directory.GetFiles(strMediaRootPath + "slides/", "*"); string strFileName = string.Empty; string strFullPath = string.Empty;
objXmlWriter.WriteStartElement("pic"); //Url till bild objXmlWriter.WriteStartElement("image"); objXmlWriter.WriteString(strMediaRootUrl + "slides/" + strFileName); objXmlWriter.WriteEndElement();//Slut image //Länk objXmlWriter.WriteStartElement("link"); //Denna gång lämnar vi -link- tomt. Här kan man spara en url om bilderna ska vara klickbara objXmlWriter.WriteEndElement();//Slut link
objXmlWriter.WriteEndElement();//Slut pic }
objXmlWriter.WriteEndElement();//Slut images objXmlWriter.WriteEndDocument(); objXmlWriter.Close(); } catch (Exception objException) { Trace.Warn("XML-fil för slideshow kunde ej sparas! Fel: ",objException.Message); } }
Och slutligen spottas xml-filen ut som följer den här strukturen:
Laddade just hem Paint.NET och har provkört det lite snabbt. Verkar vara kanonbra. Det startar upp på typ en sekund och har en hel del funktionalitet när det gäller bildbehandling.
Jag har länge letat efter ett sådant här program för att använda till snabbare ändringar på bilder, och nu har jag funnit det. Tidigare har jag gjort all bildbehandling i Photoshop och det vet ju de flesta användare att det är ganska så segstartat.