none
Windows Forms - Exibição de fotos em DataGridView RRS feed

  • Pergunta

  • Utilizo o código abaixo para carregar os dados de uma tabela em um DataGridView, em uma das colunas é exibida uma foto.

    A foto não é gravada em banco de dados, somente o caminho da foto é gravado na tabela (Exemplo c:\fotos\Teste01.jpg), ao carregar os dados a rotina exibe a foto de acordo com o caminho gravado na tabela.

    O problema é que apenas a primeira imagem é carregada, as demais não aparecem. Os caminhos de todas as imagens estão corretos e os arquivos existem. Alguém sabe me informar onde está o problema?

    //Conecta com o banco de dados e carrega os dados
    Dal_Clientes obj = new Dal_Clientes();
    dgvHistorico.DataSource = obj.sel_tbHistoricoFotos();
    
    //Após carregar os dados no grid, a rotina p/ exibir imagens
    Image img = null;
    
    //Percorre todas as linhas do grid
    for (int i = 0; i < dgvHistorico.RowCount; i++)
    {
        //coluna onde é exibido o caminho
        img = Image.FromFile(dgvHistorico.CurrentRow.Cells["patharquivo"].Value.ToString());
    
        //Coluna que exibirá a foto
        //Obs: coluna do tipo DataGridViewImageColumn
        dgvHistorico.CurrentRow.Cells["foto"].Value = img;
    }
    


    quarta-feira, 12 de abril de 2017 04:47

Respostas

  • Problema resolvido ao substituir o CurrentRow pelo índice da linha percorrida (Rows[i]) no DataGridView.

    //Conecta com o banco de dados e carrega os dados
    Dal_Clientes obj = new Dal_Clientes();
    dgvHistorico.DataSource = obj.sel_tbHistoricoFotos();
    
    //Após carregar os dados no grid, a rotina p/ exibir imagens
    Image img = null;
    
    //Percorre todas as linhas do grid
    for (int i = 0; i < dgvHistorico.RowCount; i++)
    {
        //coluna onde é exibido o caminho
        //img = Image.FromFile(dgvHistorico.CurrentRow.Cells["patharquivo"].Value.ToString());
        img = Image.FromFile(dgvHistorico.Rows[i].Cells["patharquivo"].Value.ToString());
        
        //Coluna que exibirá a foto
        //Obs: coluna do tipo DataGridViewImageColumn
        //dgvHistorico.CurrentRow.Cells["foto"].Value = img;
        dgvHistorico.Rows[i].Cells["foto"].Value = img;
    }

    • Marcado como Resposta Jefferson Deroza quinta-feira, 13 de abril de 2017 03:51
    quinta-feira, 13 de abril de 2017 03:51

Todas as Respostas

  • Boa tarde Jefferson,

    Você já tentou depurar para ver o que a variável "img" contem após o segundo loop?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 12 de abril de 2017 19:00
    Moderador
  • Problema resolvido ao substituir o CurrentRow pelo índice da linha percorrida (Rows[i]) no DataGridView.

    //Conecta com o banco de dados e carrega os dados
    Dal_Clientes obj = new Dal_Clientes();
    dgvHistorico.DataSource = obj.sel_tbHistoricoFotos();
    
    //Após carregar os dados no grid, a rotina p/ exibir imagens
    Image img = null;
    
    //Percorre todas as linhas do grid
    for (int i = 0; i < dgvHistorico.RowCount; i++)
    {
        //coluna onde é exibido o caminho
        //img = Image.FromFile(dgvHistorico.CurrentRow.Cells["patharquivo"].Value.ToString());
        img = Image.FromFile(dgvHistorico.Rows[i].Cells["patharquivo"].Value.ToString());
        
        //Coluna que exibirá a foto
        //Obs: coluna do tipo DataGridViewImageColumn
        //dgvHistorico.CurrentRow.Cells["foto"].Value = img;
        dgvHistorico.Rows[i].Cells["foto"].Value = img;
    }

    • Marcado como Resposta Jefferson Deroza quinta-feira, 13 de abril de 2017 03:51
    quinta-feira, 13 de abril de 2017 03:51