Как программно изменить культуру DataGridView? - PullRequest
0 голосов
/ 20 ноября 2008

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

В настоящее время столбец цены отформатирован как "C2". По умолчанию это выглядит как "$ 1,00".

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

Есть предложения о том, как изменить культуру DataGridView?

Заранее спасибо!

1 Ответ

1 голос
/ 28 января 2009

Вы ищете 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 , ru-RU}

Нечто подобное должно сработать (не проверено)

  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

Если вы связываете из DataTable, вы можете явно установить DataTable Cultureinfo

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

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

Простой пример будет:

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