Pregunta

Me gustaría cambiar la columna de precios en mi DataGridView en función de la moneda ComboBox de una moneda seleccionada por el usuario.

Actualmente, la columna de precio está formateada en "C2". Este valor predeterminado se parece a "$ 1.00".

Sin embargo, si mi usuario cambiara la moneda a Gran libra esterlina, me gustaría mostrar el signo de la Gran libra británica (" & # 163; ") en lugar de un signo de dólar (" $ " ;) por lo que el resultado final sería & # 163; 1.00.

¿Alguna sugerencia sobre cómo cambiar la cultura de un DataGridView?

¡Gracias de antemano!

¿Fue útil?

Solución

Está buscando System.Globalization . Hay un montón de diferentes opciones ...

Si solo desea cambiarlo para ese elemento específico:

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

Si desea cambiarlo por todo, puede

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

En un DataGird si está tratando de formatear una fila enlazada a datos, necesitará conectarse al evento onDataBound y formatear de esa manera, ya que no creo que pueda pasar el argumento como: DataFormatString = " {0: c, en-GB}

Algo así debería hacer el truco (no probado)

  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

Si está enlazando desde una tabla de datos, puede configurar explícitamente el DataTable Cultureinfo

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

Si está buscando apoyo cultural en todo el sistema (lo cual no creo que sea, pero vale la pena mencionar), puede usar archivos de recursos

be Ejemplo simple:

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