Programaticamente mudar a cultura de um DataGridView?
-
08-07-2019 - |
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!
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");