none
Pegar caminho da imagem e mostrar DataGridView RRS feed

  • Pergunta

  • Estou tentando mostrar uma imagem no DataGridView (Desktop) puxando do banco. Consegui, mas mostra somente a primeira imagem. Eis meu código

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Consulta_Codigo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
    
    
            Conecta c = new Conecta();
            ConsultaItemDAO objConsultaItem = new ConsultaItemDAO();
    
            private static string query = " SELECT * FROM tb_item ORDER BY item ";
            private string strCAMINHODESENHO = "";
    
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
                try
                {
    
                    DataGridViewImageColumn img = new DataGridViewImageColumn();
                   
                 
    
    
                     dgvItem.DataSource = objConsultaItem.Listar(query);
                     objConsultaItem.ConfiguraGrid(dgvItem);
    
                     //  Image image = Image.FromFile(@"C:\Imagens\RCH001.jpg");
                    Image image = Image.FromFile(strCAMINHODESENHO);
    
    
                    img.Image = image;
                    dgvItem.Columns.Add(img);
                    img.HeaderText = "Image";
                    img.Name = "img";
    
                }
    
    
                catch(Exception erro)
    
                {
    
                    MessageBox.Show("" + erro);
    
    
                }
               
    
    
            }
    
    
            private void dgvItem_CellEnter(object sender, DataGridViewCellEventArgs e)
            {
    
                strCAMINHODESENHO = Convert.ToString(dgvItem.Rows[e.RowIndex].Cells["CAMINHODESENHO"].Value);
    
            }
    
    
    
    
    
    
    
    
        }
    }

    using FirebirdSql.Data.FirebirdClient;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Consulta_Codigo
    {
        class ConsultaItemDAO
        {
    
    
    
            #region ListarRegistros
    
    
            Conecta c = new Conecta();
            FbDataAdapter da;
    
    
    
            public DataTable Listar(string query)
            {
    
    
                DataTable dt = new DataTable();
    
                try
                {
    
                    c.conectar();
    
                    da = new FbDataAdapter(query, c.cn);
                    da.Fill(dt);
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
                finally
                {
                    if (c.cn.State == ConnectionState.Open)
                        c.desconectar();
                }
                return dt;
            }
    
    
    
    
    
            #endregion
    
    
    
    
    
            public void ConfiguraGrid(DataGridView dgv)
            {
    
                dgv.RowsDefaultCellStyle.BackColor = Color.AliceBlue;
                dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue;
    
    
              
    
            }
    
    
    
    
    
        }
    }


    • Editado gelson_ventura quarta-feira, 24 de fevereiro de 2016 17:10
    • Tipo Alterado Marcos SJ quarta-feira, 24 de fevereiro de 2016 20:13 How to/Solicitação de código
    • Tipo Alterado Levi DomingosModerator sábado, 27 de fevereiro de 2016 21:29
    quarta-feira, 24 de fevereiro de 2016 17:09

Respostas

  • Você tem que percorrer sua coluna de path para setar o valor individual de cada imagem.

    Fiz um projeto rápido aqui e está funcionando desta forma.

                DataGridViewImageColumn img = new DataGridViewImageColumn
                {
                    Name = @"img",
                    DataPropertyName = @"Content",
                    HeaderText = @"Image",
                    ImageLayout = DataGridViewImageCellLayout.Zoom
                };
                dataGridView1.Columns.Add(img);
                dataGridView1.DataSource = q.ToList();
    
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    row.Cells[@"img"].Value = Image.FromFile(row.Cells[@"Caminho"].Value.ToString()); 
                }
    Att,


    Antero Marques



    quarta-feira, 24 de fevereiro de 2016 22:18
  • Tudo bem Gelson.

    É porque isto virou uma discussão e não mais uma pergunta.

    O importante é que deu certo pra você.

    Att,


    Antero Marques

    quinta-feira, 25 de fevereiro de 2016 13:01

Todas as Respostas

  • quarta-feira, 24 de fevereiro de 2016 17:15
  • Olá gelson_ventura,

    Entendi que o seu código mostra somente uma imagem, qual seria o erro com a linguagem que o impede de mostrar a segunda imagem?

    Atenciosamente


    Marcos SJ

    Esse conteúdo e 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, 24 de fevereiro de 2016 18:39
  • Então eu preciso que chame as imagens de acordo com o caminho que esta na coluna CAMINHODESENHO. E não apenas o caminho da primeira imagem.



    quarta-feira, 24 de fevereiro de 2016 18:49
  • quarta-feira, 24 de fevereiro de 2016 18:52
  • Entendi o que precisa fazer, mas qual seria o problema com a linguagem que o impede de fazer isso?


    Marcos SJ

    Esse conteúdo e 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, 24 de fevereiro de 2016 19:46
  • O problema é que não consigo fazer dessa maneira
    quarta-feira, 24 de fevereiro de 2016 19:52
  • Você tem que percorrer sua coluna de path para setar o valor individual de cada imagem.

    Fiz um projeto rápido aqui e está funcionando desta forma.

                DataGridViewImageColumn img = new DataGridViewImageColumn
                {
                    Name = @"img",
                    DataPropertyName = @"Content",
                    HeaderText = @"Image",
                    ImageLayout = DataGridViewImageCellLayout.Zoom
                };
                dataGridView1.Columns.Add(img);
                dataGridView1.DataSource = q.ToList();
    
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    row.Cells[@"img"].Value = Image.FromFile(row.Cells[@"Caminho"].Value.ToString()); 
                }
    Att,


    Antero Marques



    quarta-feira, 24 de fevereiro de 2016 22:18
  • Obrigado Antero, isso mesmo que eu precisava.

    Só não vejo mais onde marcar sua resposta

    quinta-feira, 25 de fevereiro de 2016 12:50
  • Tudo bem Gelson.

    É porque isto virou uma discussão e não mais uma pergunta.

    O importante é que deu certo pra você.

    Att,


    Antero Marques

    quinta-feira, 25 de fevereiro de 2016 13:01