0

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

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

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

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

前もって感謝します!

4

1 に答える 1

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 イベントにフックしてそのように再フォーマットする必要があります。 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");
于 2009-01-28T11:54:32.627 に答える