none
Setar valor da célula de um DataGridView pelo DisplayIndex RRS feed

  • Pergunta

  • Bom dia. 

    Eu consigo setar o valor de uma célula de acordo com o DisplayIndex ao invés do Index da coluna? Pois eu permito que o usuário altere a ordem das colunas no sistema, porém, o index nunca muda nesse caso, apenas o DisplayIndex. Portanto, preciso que a aplicação veja qual é o DisplayIndex da coluna e então insira o que é para ser inserido. 

    Até agora estou usando o Index normal:

    string indicadorMovimento = row.Cells[0].Value == null ? String.Empty : row.Cells[0].Value.ToString();
    Obrigado


    Leonardo D'Amato

    terça-feira, 25 de outubro de 2016 11:51

Respostas

  • Leonardo,

    Desconheço alguma coleção ou método que permita a rápida busca de uma coluna pelo DisplayIndex, acredito que a única forma seja um loop entre todas as colunas verificando qual tem o DisplayIndex desejado para então manipular suas propriedades.

    Outra possibilidade seria você manter um dicionário e controlar o mapeamento index/DisplayIndex através do evento ColumnDisplayIndexChanged  (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columndisplayindexchanged.aspx).


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 25 de outubro de 2016 12:09
  • Boa ideia, Juliano. 

    Fiz a partir de dicionario e funcionou perfeitamente. 

    Segue o código para quem interessar:

    Dictionary<int, int> index = new Dictionary<int, int>();
    foreach (DataGridViewColumn col in dgvItens.Columns)
    {
        index.Add(col.Index, col.DisplayIndex);
    }
    int displayIndex = index.Where(x => x.Key == 0).Select(x => x.Value).FirstOrDefault();
    

    Valeu!


    Leonardo D'Amato

    terça-feira, 25 de outubro de 2016 13:39

Todas as Respostas

  • Leonardo,

    Desconheço alguma coleção ou método que permita a rápida busca de uma coluna pelo DisplayIndex, acredito que a única forma seja um loop entre todas as colunas verificando qual tem o DisplayIndex desejado para então manipular suas propriedades.

    Outra possibilidade seria você manter um dicionário e controlar o mapeamento index/DisplayIndex através do evento ColumnDisplayIndexChanged  (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columndisplayindexchanged.aspx).


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 25 de outubro de 2016 12:09
  • Boa ideia, Juliano. 

    Fiz a partir de dicionario e funcionou perfeitamente. 

    Segue o código para quem interessar:

    Dictionary<int, int> index = new Dictionary<int, int>();
    foreach (DataGridViewColumn col in dgvItens.Columns)
    {
        index.Add(col.Index, col.DisplayIndex);
    }
    int displayIndex = index.Where(x => x.Key == 0).Select(x => x.Value).FirstOrDefault();
    

    Valeu!


    Leonardo D'Amato

    terça-feira, 25 de outubro de 2016 13:39