none
Como agregarle u obtener el valor de una celda dentro de una columna de tipo imagen en datagridview C# RRS feed

  • Pregunta

  • Buenas tardes con todos comunidad.

    Me gustaría hacerles una consulta, quisiera saber si existe manera de cambiarle el valor a una celda de una columna de tipo imagen en un datagridview, me explico mejor, he creado una columna nueva de tipo imagen dentro del datagridview, en la cual agregue dos filas nuevas y a cada una de estas le agregue  una imagen distinta a la otra, el código lo muestro a continuación:

    DataGridViewImageColumn imgn = new DataGridViewImageColumn();
                dataGridView1.Columns.Add(imgn);
                imgn.HeaderText = ""; 
                imgn.Name = "Columna1"; 
                Image image0 = Image.FromFile(@"D:\masRojo.png");
                Image image1 = Image.FromFile(@"D:\masAzul.png");
    
    
                dataGridView1.Rows.Add(2);
                dataGridView1.Rows[0].Cells["Columna1"].Value = redimensionarImagen(image0, 15, 15);
                dataGridView1.Rows[1].Cells["Columna1"].Value = redimensionarImagen(image1, 15, 15);
    entonces la llamar al valor de la celda mediante el evento doble_click y mostrarlo me resulta lo siguiente:
    System.Drawing.Bitmap
    esto independientemente de la celda que seleccione, entonces me gustaría saber si existe la forma de hacer que al darle doble_click me muestre un valor distinto para cada celda, el código utilizado es el siguiente:
    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                
                    MessageBox.Show("Selecionaste el Mas: " + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                
            }

    miércoles, 7 de octubre de 2020 17:46

Todas las respuestas

  • Hola (no se tu nombre porque parece que hay un error temporal en el sitio web que no se ven los nombres)

    El MessageBox.Show() te muestra System.Drawing.Bitmap porque recibe un string como parámetro, entonces para cualquier Bitmap que le pases, te va a mostrar lo mismo, esto es el nombre de su clase como string.

    Lo que podes hacer es, no se si que muestre el nombre del archivo (que si serían diferentes), pero si seguro, que muestre las propias imágenes, si en lugar de un MessageBox.Show() pones un Form con un PictureBox.

    Ah, esto es C# pero te equivocaste y lo pusiste en el SubForo de VB, de casualidad lo vi.

    Saludos

    Pablo

    miércoles, 7 de octubre de 2020 18:15
  • tienes razón Pablo me equivoque y publique esta consulta en el foro de VB, de todas maneras gracias por responder realizare la misma consulta en el foro de C# para que de encontrar la solución pueda serle útil a mas personas.
    miércoles, 7 de octubre de 2020 18:41
  • Hola Freddy_Sanchez,

    Ya moví tu pregunta al foro de c#.  Acá te dejo una guía: Cómo agregar imágenes a la celda DataGridView usando C#. Si quieres hacerlo de forma dinámica, puedes agregar imágenes mientras agregas filas como esta:

    dataGridView1.Rows.Add("test", "test1", Properties.Resources.image00);

    También puedes cambiar la imagen mientras tu aplicación se está ejecutando:

    dataGridView1.Rows[0].Cells[2].Value = Properties.Resources.image01;

    Otras formas:

    void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
       {             
            if (dataGridView1.Columns[e.ColumnIndex].Name == "StatusImage") 
            { 
                 // Your code would go here - below is just the code I used to test 
                  e.Value = Image.FromFile(@"C:\Pictures\TestImage.jpg"); 
            } 
       } 
    
    //con bitmap  
    
    Bitmap bmp = (Bitmap) Bitmap.FromFile(someimagefile);
    DataGridViewImageCell iCell = new DataGridViewImageCell();
    iCell.Value = bmp;
    dataGridView1[1, 2] = iCell;
    
    // de manera directa
    dataGridView1[yourColumn, yourRow].Value = Image.FromFile(path); 
    
    //con botón
    private void button1_Click(object sender, EventArgs e)
    {
        dataGridView1.ColumnCount = 3;
        dataGridView1.Columns[0].Name = "Product ID";
        dataGridView1.Columns[1].Name = "Product Name";
        dataGridView1.Columns[2].Name = "Product Price";
    
        string[] row = new string[] { "1", "Product 1", "1000" };
        dataGridView1.Rows.Add(row);
        row = new string[] { "2", "Product 2", "2000" };
        dataGridView1.Rows.Add(row);
        row = new string[] { "3", "Product 3", "3000" };
        dataGridView1.Rows.Add(row);
        row = new string[] { "4", "Product 4", "4000" };
        dataGridView1.Rows.Add(row);
    
        DataGridViewImageColumn img = new DataGridViewImageColumn();
        Image image = Image.FromFile("Image Path");
        img.Image = image;
        dataGridView1.Columns.Add(img);
        img.HeaderText = "Image";
        img.Name = "img";
    
    }
    
    
    //otra forma
     Image img1 = Image.FromFile("D:\\image\\1.jpg");
     
      Image img2 = Image.FromFile("D:\\image\\2.jpg");
     
    
      dataGridView1[0, 0].Value = img1;
     
      dataGridView1[0, 1].Value = img2;
    
    //usando System.Windows.Forms.DataGridViewImageCell
    
          var img = Image.FromFile("D:\\image\\1.jpg");
             DataGridViewImageCell DGic = new  DataGridViewImageCell();
     
                DGic.Value = img;
     
                this.dataGridView1[0,0] = DGic;
    
    
    
    

    Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    jueves, 8 de octubre de 2020 3:18
    Moderador
  • Hola Freddy_Sanchez,

    ¿Alguna novedad sobre tu pregunta? ¿Han sido útiles las respuestas proporcionadas? Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice "Marcar como respuesta").

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    sábado, 17 de octubre de 2020 1:01
    Moderador