Funktion för att avgöra om ett land är med i EU

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.

private bool isMemberOfEU(string CountryCode)
{
if (CountryCode == "AT" || CountryCode == "BE" || CountryCode == "BG" || CountryCode == "BG" || CountryCode == "CY" || CountryCode == "CZ" || CountryCode == "DK" || CountryCode == "EE" || CountryCode == "FI" || CountryCode == "FR" || CountryCode == "DE" || CountryCode == "GR" || CountryCode == "HU" || CountryCode == "IE" || CountryCode == "IT" || CountryCode == "LV" || CountryCode == "LT" || CountryCode == "LU" || CountryCode == "MT" || CountryCode == "NL" || CountryCode == "PL" || CountryCode == "PT" || CountryCode == "RO" || CountryCode == "SK" || CountryCode == "SI" || CountryCode == "ES" || CountryCode == "SE" || CountryCode == "GB")
{
return true;
}
else
{
return false;
}
}

By Jesper Lind

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.

<asp:DropDownList id="ddlCountry" DataValueField="CountryCode" DataTextField="CountryName" style="width:200px;" runat="server" />

I kodfilens Page_Load-event binder jag denna DropDown till en DataView.

void Page_Load(object Source, EventArgs E)
{
if((!Page.IsPostBack)
{
ddlCountry.DataSource = GetAllCountriesDataView();
ddlCountry.DataBind();
}
}

Funktionen för att skapa datakällan ser ut så här:

protected DataView GetAllCountriesDataView()
{
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="ZA">South Africa</option>
<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.

By Jesper Lind

Skapa xml från filnamn i en mapp

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"];

Funktionerna som skapar xml-filen

private void CreateSlideshow()
{
string strXMLPath = strXmlRootPath + "slideshow.xml";

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;

foreach (string strFile in strFiles)
{
strFileName = Path.GetFileName(strFile);
strFullPath = Path.GetFullPath(strFile);

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:

<?xml version="1.0" encoding="utf-8"?>
<images>
<pic>
<image>http://localhost:1643/test-site/media/slides/IMG_4954.jpg</image>
<link />
</pic>
<pic>
<image>http://localhost:1643/test-site/media/slides/IMG_4955.jpg</image>
<link />
</pic>
<pic>
<image>http://localhost:1643/test-site/media/slides/IMG_4956.jpg</image>
<link />
</pic>
<pic>
<image>http://localhost:1643/test-site/media/slides/IMG_4960.jpg</image>
<link />
</pic>
<pic>
<image>http://localhost:1643/test-site/media/slides/IMG_4961.jpg</image>
<link />
</pic>
</images>

 

By Jesper Lind

Paint.NET - gratis program för bildbehandling

http://www.codeodyssey.se/upload/resource/blog/paint-net.png

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.

Att programmet är helt gratis skadar ju inte heller. Det är släppt under Creative Commons Attribution-NonCommercial-NoDerivs 2.5 Licens och C# kod på 133000 rader finns att ladda hem för den som är sugen.

(Tack Sovrat)

By Jesper Lind