Pergunta

Eu gostaria de alterar a coluna de preços no meu DataGridView com base em moeda de um usuário selecionado ComboBox moeda.

Atualmente, a coluna preço é formatado para "C2". O padrão para se parecer com "$ 1,00".

No entanto, se o meu usuário foram para mudar a moeda a ser Grande libra britânica, eu gostaria de exibir o sinal de libra esterlina ( "£") em vez de um sinal de dólar ( "$") para que o resultado final seria ser £ 1,00.

Todas as sugestões sobre como alterar a cultura de um DataGridView?

Agradecemos antecipadamente!

Foi útil?

Solução

Você está procurando System.Globalization . Há um monte de diferentes opções ...

Se você quiser apenas alterá-lo para esse 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);

Se você gostaria de mudar-lo para tudo, então você pode

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

Em um DataGird se você está tentando formatar uma linha de ligação de dados terá de ligar para o evento o OnDataBound e reformatar dessa forma, como eu não acredito que você pode passar o argumento como: DataFormatString = "{0: c , en-GB}

Algo como isso deve fazer o truque (não testado)

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

ou

Se você está ligando de um DataTable pode explicatlly definir o DataTable cultureInfo

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

Se você está procurando Sistema amplo apoio cultural (o que eu não acho que você é, mas vale a pena mencionar), então você pode olhar através de arquivos de recursos

exemplo simples seria:

ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("resource", "path to resouce files", null);
this.Label1.Text = rm.GetString("name");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top