You are looking for System.Globalization. There is A BUNCH of different options...
If you want to just change it for that specific element:
//Label example but theory is the same
[CultureInfo][2] ci = new CultureInfo("en-GB");
double myMoney = 100.00;
this.Label1.Text = myMoney.ToString("C2", ci);
If you would like to change it for everything then you can
//Will format everything
string strCulture = "en-GB";//Session["culture"].ToString();
[CultureInfo][3] ci = new CultureInfo(strCulture);
Thread.CurrentThread.[CurrentCulture][4] = ci ;
Thread.CurrentThread.[CurrentUICulture][5] = ci;
double myMoney = 100.00;
this.Label1.Text = myMoney.ToString("C2");
In a DataGird if you are trying to format a databound row you will need to hook into the the onDataBound event and reformat that way, as I don't believe you can pass the argument as:DataFormatString = "{0:c,en-GB}
Something like so should do the trick(not tested)
protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
//Define CultureInfo in page scope just put in example for reference
[CultureInfo][6] ci = new CultureInfo("en-GB");
if (e.Row.RowType == DataControlRowType.DataRow)
((Label)e.Row.FindControl("myMoney")).Text.ToString("C2", ci);
}
OR
If you are Binding from a DataTable you can explicatlly set the DataTable Cultureinfo
CultureInfo ci = new CultureInfo("en-GB");
myTable.Locale = ci;
If you are looking for System wide cultural support(which I don't think you are but is worth mentioning) then you can look at using resource files
Simple example would be:
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("resource", "path to resouce files", null);
this.Label1.Text = rm.GetString("name");