FORMATAR DADO COM ATRIBUTO
Boa tarde, meus amigos.
Estou preenchendo um DataGridView com os dados de uma classe e existe uma coluna onde tem um valor monetário.
Na tabela o dados é gravado, por exemplo, assim: 1205,00.
Gostaria que ao aparecer na grid, mostrasse assim: 1.205,00.
Estou tentando usar com o atributo DisplayFormat do System.ComponenteModel.DataAnnotations no objeto, dessa forma:
[c]private string _saldoInicial;
[Browsable(true)]
[DisplayName([Ô]Saldo Inicial[Ô])] // 10
[DisplayFormat(DataFormatString = [Ô]{0:###,##0.00}[Ô])]
[DataObjectField(false, false, true)]
public string SaldoInicial
{
get { return _saldoInicial; }
set { _saldoInicial = value; }
}/c]
mas não está dando certo, creio que a formatação está errada, alguém poderia me ajudar?
Estou preenchendo um DataGridView com os dados de uma classe e existe uma coluna onde tem um valor monetário.
Na tabela o dados é gravado, por exemplo, assim: 1205,00.
Gostaria que ao aparecer na grid, mostrasse assim: 1.205,00.
Estou tentando usar com o atributo DisplayFormat do System.ComponenteModel.DataAnnotations no objeto, dessa forma:
[c]private string _saldoInicial;
[Browsable(true)]
[DisplayName([Ô]Saldo Inicial[Ô])] // 10
[DisplayFormat(DataFormatString = [Ô]{0:###,##0.00}[Ô])]
[DataObjectField(false, false, true)]
public string SaldoInicial
{
get { return _saldoInicial; }
set { _saldoInicial = value; }
}/c]
mas não está dando certo, creio que a formatação está errada, alguém poderia me ajudar?
Não sei se te ajuda mais....
COM CIFRAO R$ 1.000,00
Dim DEC As Decimal = TextBox1.Text
MsgBox(DEC.ToString([Ô]C[Ô]))
SEM CIFRAO 1.000,00
Dim DEC As Decimal = TextBox1.Text
MsgBox(DEC.ToString([Ô]N[Ô]))
COM CIFRAO R$ 1.000,00
Dim DEC As Decimal = TextBox1.Text
MsgBox(DEC.ToString([Ô]C[Ô]))
SEM CIFRAO 1.000,00
Dim DEC As Decimal = TextBox1.Text
MsgBox(DEC.ToString([Ô]N[Ô]))
Então, a sua declaração está como string, e você está retornando um número, que pode ser double ou decimal.
Tenta fazer da seguinte forma.
public string SaldoInicial
{
get { return _saldoInicial; }
set { _saldoInicial = value; }
}
Tenta fazer da seguinte forma.
public decimal saldoInicial {get;set;}
Colega Guimoraes123, alterei para Decimal e o resultado foi o mesmo. Com Double também, não altera nada.
Veja como está sendo exibido no DataGridView o campo Saldo Inicial.
Creio que eu deva utilizar algum atributo para formatar o objeto antes de exibir, mas não estou sabendo como fazer isso.
Veja como está sendo exibido no DataGridView o campo Saldo Inicial.
Creio que eu deva utilizar algum atributo para formatar o objeto antes de exibir, mas não estou sabendo como fazer isso.
Citação::
Colega Guimoraes123, alterei para Decimal e o resultado foi o mesmo. Com Double também, não altera nada.
Veja como está sendo exibido no DataGridView o campo Saldo Inicial.
Creio que eu deva utilizar algum atributo para formatar o objeto antes de exibir, mas não estou sabendo como fazer isso.
Tentou formartar da forma que passei? só por curiosidade kkk ?
Essa anotação não é consultada para o componente DataGridView do windows forms. De acordo com a documentação, ela é usada para DataGridView do ASP.NET. Mas é possÃvel contornar isso. O DataGridView do windows forms, pode receber outros objetos que por Reflection podem verificar essa decoração e formatar os dados na coluna conforme você espera. é algo de nÃvel intermediário, não muito difÃcil de ser implementado e existem dezenas de exemplos na Web para isso.
Kurtgu,
Dessa meneira não dá certo.
Kerplunk,
Se tivesse algum exemplo para me mostrar, agradeceria, pois procurei muito na Web e não encontrei nada que me ajudasse.
O que eu queria era algo do tipo, colocar um atributo ou decoração no objeto da classe, assim quando eu vinculasse os dados da classe ao DataGridView com o DataSource, não precisaria me preocupar em saber qual é a coluna que eu tenho que formatar, entendeu? Provisoriamente eu resolvi o problema assim:
Funcionou, porém se amanhã ou depois eu tiver que incluir mais algumas colunas na grid, ou mesmo, alterar a ordem das colunas exibidas, eu teria que modificar o código e verificar qual o número da coluna a ser formatada corretamente, e é justamente isso que eu não gostaria de ter que fazer, entendeu?
Agradeço se puder me ajudar.
Citação:Tentou formartar da forma que passei? só por curiosidade kkk ?
Dessa meneira não dá certo.
Kerplunk,
Citação:O DataGridView do windows forms, pode receber outros objetos que por Reflection podem verificar essa decoração e formatar os dados na coluna conforme você espera
Se tivesse algum exemplo para me mostrar, agradeceria, pois procurei muito na Web e não encontrei nada que me ajudasse.
O que eu queria era algo do tipo, colocar um atributo ou decoração no objeto da classe, assim quando eu vinculasse os dados da classe ao DataGridView com o DataSource, não precisaria me preocupar em saber qual é a coluna que eu tenho que formatar, entendeu? Provisoriamente eu resolvi o problema assim:
// criando uma List<> com os dados;
List<Banco> _bancos = new List<Banco>(new Banco().GetAll().Where(x => x.Conta.Contains(txtOcorrencia.Text)).OrderBy(x => x.Nome));
// se não encontrar registros, mostra a mensagem, senão, vincula os dados ao DataGridView;
if (_bancos.Count == 0)
{
lblRegistros.Text = [Ô]Nenhum registro encontrado[Ô];
MessageBox.Show([Ô]Nenhum registro para exibir[Ô], [Ô]Nenhum registro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information);
dgv.DataSource = null;
return;
}
dgv.DataSource = _bancos;
}
// exibe a quantidade de registros encontrados;
if (dgv.RowCount > 1) lblRegistros.Text = dgv.RowCount.ToString() + [Ô] registros encontrados[Ô];
else lblRegistros.Text = dgv.RowCount.ToString() + [Ô] registro encontrado[Ô];
// formatando a coluna do saldo inicial (coluna 4);
dgv.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgv.Columns[4].DefaultCellStyle.Format = [Ô]###,##0.00[Ô];
Funcionou, porém se amanhã ou depois eu tiver que incluir mais algumas colunas na grid, ou mesmo, alterar a ordem das colunas exibidas, eu teria que modificar o código e verificar qual o número da coluna a ser formatada corretamente, e é justamente isso que eu não gostaria de ter que fazer, entendeu?
Agradeço se puder me ajudar.
PERCIFILHO,
Fiz um teste aqui, e realmente a formatação da coluna não se aplica ao datagridview do windows forms.
Uma forma de fazer isto é formatando o valor no get.
Fiz um teste aqui, e realmente a formatação da coluna não se aplica ao datagridview do windows forms.
Uma forma de fazer isto é formatando o valor no get.
private string _valor;
[DisplayName([Ô]Saldo Inicial[Ô])]
public string valor {
get { return Convert.ToDouble(_valor).ToString([Ô]N2[Ô]); }
set { _valor = value; }
}
GUIMORAES123, tentei fazer a formatação no get, porém ocorreu uma exceção ao abrir o formulário:
{[Ô]Exception of type [ô]System.StackOverflowException[ô] was thrown.[Ô]}
{[Ô]Exception of type [ô]System.StackOverflowException[ô] was thrown.[Ô]}
Fiz um exemplo de como deve ficar
Realmente, funcionou Gui, acho que eu tinha feito algo errado, agora testei e funcionou.
Muito obrigado pela ajuda. Até mais.
Muito obrigado pela ajuda. Até mais.
Tópico encerrado , respostas não são mais permitidas