質問

ユーザーが通貨ComboBoxを選択した通貨に基づいて、DataGridViewの価格設定列を変更したい。

現在、価格列は「C2」にフォーマットされています。デフォルトは「$ 1.00」のようになります。

ただし、ユーザーが通貨を英国ポンドに切り替える場合、ドル記号(" $&quot)ではなく、英国ポンド記号("£")を表示したい;)最終結果は£ 1.00になります。

DataGridViewのカルチャを変更する方法に関する提案はありますか?

事前に感謝します!

役に立ちましたか?

解決

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イベントにフックして、そのように再フォーマットする必要があります。引数を次のように渡すことはできないと思われます。 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;

システム全体の文化的なサポートを探している場合(私はそうは思わないが、言及する価値がある)、リソースファイル

簡単な例は次のようになります。

ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("resource", "path to resouce files", null);
this.Label1.Text = rm.GetString("name");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top