none
Mudar valor de uma coluna no DataGridView RRS feed

  • Pergunta

  • Fala ae pessoal..

    alguem ai sb como formatar um valor de uma determinada coluna usando o DataGridView do windows form?

    Tipo, imagine que eu tenha uma classe com dois enumeradores... bom cada enumerador é uma propriedade e dentro do datagridview essas propriedades se transformarão em colunas, bom, ai vem a questão: No data grid eles vao aparecer em forma de numero e eu gostaria que eles aparecessem em forma de texto:

    0 = Status aguardando confirmação

    1 = Finalizado

    ...

    Bom, existe outras colunas que precisam de tratamentos especiasi, mais não faço ideia de como fazer isso.. não existe nenhum evento nesse controle que pareça com o OnItemDataBound do asp.net... ou seja... não sei como fazer..alguem ai ja teve esse problema?

     

    vlw


    Ozzyvegeta
    segunda-feira, 17 de maio de 2010 23:35

Respostas

  • Ola,

    Cara, cheguei a fazer dessa forma, mais isso eh inviavel pq toda vez que muda algo na tela (maximiza, por exemplo) passa por esse evento...

    muito custo pra algo que seria feito com apenas um evento de bind SE TIVESSE ! rs... bom, ja desisti de windows form e vou ver como ta as aplicações em WPF, tomare q lá não tenhamos esse tipo de problema num componente tão conhecido.

    abs


    Ozzyvegeta
    sexta-feira, 25 de junho de 2010 11:30

Todas as Respostas

  • Prezado,

    Você está utilizando o quê como DataSource da sua grid? Não é mais fácil criar uma coluna calculada com o texto desejado?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sexta-feira, 4 de junho de 2010 00:45
    Moderador
  • Não, pq assim eu teria que popular a grid na "mão" e assim jogo fora todos os recursos que o .DataSource me dá. No asp.net por exemplo, eu crio um metodo que intercepta os ItemDataBound e assim eu altero qualquer coisa da grid, no windows form não vejo nada parecido oq me surpreende até... nesse exemplo que dei usando um Enum como coluna, como se resolveria usando todos os recursos de DataBinding do windows form?
    Ozzyvegeta
    terça-feira, 8 de junho de 2010 11:18
  • Prezado,

    Não falo em você criar uma coluna calculada na DataGridView, mas sim na sua DataTable, por exemplo... É uma DataTable que você está setando como DataSource da sua DataGridView?

    Você poderia continuar setando a DataSource da sua DataGridView do mesmo jeito que ela nem vai saber se a coluna é calculada ou não...

    Veja um exemplo:

    http://ondotnet.com/pub/a/dotnet/2003/05/26/datacolumn_expressions.html


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sexta-feira, 11 de junho de 2010 22:40
    Moderador
  • Não, meu datasource é uma list de objetos, que por sinal são objetos criados pelo EF... ou seja, haveria de criar um partial class apenas para essas colunas e tem mais um detalhe.. o projeto e multi-language.. não posso colocar regra de tradução dentro da classe de negocio... tenho que traduzir os ENUMs ou qualquer texto/numero na camada de apresentçaão, ou seja, em algum evento de bind... 

    Pra ser sincero, já desisti, tenho 99% de ctrz que esse controle não foi feito pra isso, ou seja, é limitado e decepcionante... mais é isso ae... 

     

    abs

     


    Ozzyvegeta
    segunda-feira, 14 de junho de 2010 12:02
  • Prezado,

    Uma saída é tratar isso no evento CellFormatting... Por exemplo:

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
      if ((dataGridView1.Rows[e.RowIndex].Cells[0].Value != null) &&
        ((bool)dataGridView1.Rows[e.RowIndex].Cells[0].Value))
        dataGridView1.Rows[e.RowIndex].Cells["TEXTOCHECK"].Value = "Checado";
      else
        dataGridView1.Rows[e.RowIndex].Cells["TEXTOCHECK"].Value = "Nao Checado";
    }

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 24 de junho de 2010 23:22
    Moderador
  • Ola,

    Cara, cheguei a fazer dessa forma, mais isso eh inviavel pq toda vez que muda algo na tela (maximiza, por exemplo) passa por esse evento...

    muito custo pra algo que seria feito com apenas um evento de bind SE TIVESSE ! rs... bom, ja desisti de windows form e vou ver como ta as aplicações em WPF, tomare q lá não tenhamos esse tipo de problema num componente tão conhecido.

    abs


    Ozzyvegeta
    sexta-feira, 25 de junho de 2010 11:30
  • Obrigado, me ajudou tbém com sua resposta.
    terça-feira, 9 de junho de 2015 13:51