2008-11-19 6 views
0

Я хотел бы изменить столбец ценообразования на моем DataGridView на основе валюты, которую пользователь выбрал валюту ComboBox.Программно изменяя культуру DataGridView?

В настоящее время столбец цены отформатирован под «C2». Это значение по умолчанию выглядит как «$ 1.00».

Однако, если бы мой пользователь переключил валюту на Великий британский фунт, я бы хотел отобразить знак Великого британского фунта («£»), а не знак доллара («$»), поэтому конечный результат составит 1,00 фунтов стерлингов.

Любые предложения о том, как изменить культуру DataGridView?

Заранее благодарен!

+0

Я добавил тег asp.net, пожалуйста, поправьте меня, если я ошибаюсь – cgreeno

ответ

1

Вы ищете System.Globalization. Существует куча различных вариантов ...

Если вы хотите просто изменить его для конкретного элемента:

//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); 

Если вы хотели бы изменить его для всего, то вы можете

 //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"); 

В DataGird, если вы пытаетесь отформатировать строку данных, вам нужно будет подключиться к событию onDataBound и переформатировать таким образом, поскольку я не считаю, что вы можете передать аргумент как: DataFormatString = "{0: c, en-GB}

Что-то вроде этого, следует сделать трюк (не проверено)

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); 
    } 

ИЛИ

Если вы Переплет из DataTable можно explicatlly установить DataTable Cultureinfo

CultureInfo ci = new CultureInfo("en-GB"); 
myTable.Locale = ci; 

Если вы ищем системную поддержку культуры (о которой я не думаю, что вы, но стоит упомянуть), вы можете посмотреть на использование resource files

Simple example будет:

ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("resource", "path to resouce files", null); 
this.Label1.Text = rm.GetString("name");