以编程方式更改DataGridView的文化?

时间:2008-11-19 21:47:52

标签: asp.net datagridview settings culture

我想根据用户选择货币ComboBox的货币更改我的DataGridView上的定价列。

目前,price列格式为“C2”。默认情况下看起来像“$ 1.00”。

但是,如果我的用户将货币换成Great British Pound,我想显示Great British Pound标志(“£”)而不是美元符号(“$”),因此最终结果将是是£1.00。

有关如何更改DataGridView文化的任何建议?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您正在寻找System.Globalization。有一个不同选择的BUNCH ......

如果您只想更改该特定元素:

   //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进行绑定,则可以明确设置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");