Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] DataGridViewImageColumn

Estas en el tema de DataGridViewImageColumn en el foro de .NET en Foros del Web. Hola a todos! hay una tontería que me está volviendo loca, no termino de dar con la solución, la cuestión es: tengo una tabla "artículos" ...
  #1 (permalink)  
Antiguo 29/05/2014, 11:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 28
Antigüedad: 10 años, 2 meses
Puntos: 1
DataGridViewImageColumn

Hola a todos!

hay una tontería que me está volviendo loca, no termino de dar con la solución, la cuestión es:

tengo una tabla "artículos" y guardo la ruta de la imagen del producto en uno de los campos, entonces quiero mostrarla junto a la información en un datagridview, pero no soy capaz, me sale siempre la misma, os muestro el código:

Código C:
Ver original
  1. DataTable dtImagenesArt = new DataTable();
  2.             dtImagenesArt = DataAccess.getDatatableMyBusiness("SELECT Imagen FROM Articulos order by CodigoDeArticulo");
  3.  
  4.             DataGridViewImageColumn img = new DataGridViewImageColumn();
  5.             dgvMaterialFabr.Columns.Add(img);
  6.             img.HeaderText = "Imagen";
  7.             img.ImageLayout = DataGridViewImageCellLayout.Stretch;
  8.             for (int i = 0; i <= dgvMaterialFabr.Rows.Count; i++)
  9.             {
  10.                 img.Image = Image.FromFile(dtImagenesArt.Rows[i]["Imagen"].ToString());
  11.                 DataGridViewRow row = dgvMaterialFabr.Rows[i];
  12.                 row.Height = 60;
  13.                 img.Width = 60;
  14.             }
  #2 (permalink)  
Antiguo 30/05/2014, 23:04
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 10 años, 11 meses
Puntos: 3
Sonrisa Respuesta: DataGridViewImageColumn

Hola Zyrah, el bucle for te va a dar error, tenés que corregirlo:
Código C#:
Ver original
  1. for (int i = 0; i < dgvMaterialFabr.Rows.Count; i++)
Todo lo demás está bien... ¡epa! me corrijo: el error está en la línea 10, en su lugar colocá:
Código C#:
Ver original
  1. dgvMaterialFabr["Imagen", i].Value = Image.FromFile(dtImagenesArt.Rows[i]["Imagen"].ToString());
La línea 13 podés sacarla fuera del bucle, así:
Código C#:
Ver original
  1. img.Name = "Imagen";
  2. img.Width = 60;
  3. for (int i = 0; i < dgvMaterialFabr.Rows.Count; i++)
  4.             {
  5.                 dgvMaterialFabr["Imagen", i].Value = Image.FromFile(dtImagenesArt.Rows[i]["Imagen"].ToString());
  6.                 DataGridViewRow row = dgvMaterialFabr.Rows[i];
  7.                 row.Height = 60;
  8.             }
¡Saludos desde Argentina!

Última edición por javidotnet; 30/05/2014 a las 23:44
  #3 (permalink)  
Antiguo 01/06/2014, 04:19
 
Fecha de Ingreso: febrero-2014
Mensajes: 28
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: DataGridViewImageColumn

Cita:
Iniciado por javidotnet Ver Mensaje
Hola Zyrah, el bucle for te va a dar error, tenés que corregirlo:
Código C#:
Ver original
  1. for (int i = 0; i < dgvMaterialFabr.Rows.Count; i++)
Todo lo demás está bien... ¡epa! me corrijo: el error está en la línea 10, en su lugar colocá:
Código C#:
Ver original
  1. dgvMaterialFabr["Imagen", i].Value = Image.FromFile(dtImagenesArt.Rows[i]["Imagen"].ToString());
La línea 13 podés sacarla fuera del bucle, así:
Código C#:
Ver original
  1. img.Name = "Imagen";
  2. img.Width = 60;
  3. for (int i = 0; i < dgvMaterialFabr.Rows.Count; i++)
  4.             {
  5.                 dgvMaterialFabr["Imagen", i].Value = Image.FromFile(dtImagenesArt.Rows[i]["Imagen"].ToString());
  6.                 DataGridViewRow row = dgvMaterialFabr.Rows[i];
  7.                 row.Height = 60;
  8.             }
¡Saludos desde Argentina!
Hola javidotnet, gracias por echarme un cable :D ahora si funciona perfectamente!

me imagino, que el fallo estaba en que cambiaba la imagen pero en realidad, le adjudicaba a todas la última que leía, madre mía una tontería así y no veía forma :P

Muchas gracias! =)
  #4 (permalink)  
Antiguo 05/06/2014, 21:14
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 10 años, 11 meses
Puntos: 3
De acuerdo Respuesta: DataGridViewImageColumn

Hola Zyrah, me alegro que hayas resuelto el problema! Te cuento donde estaba el fallo, resulta que la variable img es del tipo objeto DataGridViewImageColumn y su propiedad Image es única para todas las celdas de dicha columna, en otras palabras: cuando vos deseás que todas las celdas de la columna tengan la misma imagen, entonces debes usar dicha propiedad Image. Pero vos querías que cada celda tuviese una imagen propia, por lo tanto para eso hay que utilizar la propiedad Value de cada celda en particular. Espero haberte aclarado la cuestión, cualquier duda, preguntá.
¡Saludos cordiales desde Argentina!
  #5 (permalink)  
Antiguo 06/06/2014, 07:41
 
Fecha de Ingreso: febrero-2014
Mensajes: 28
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: DataGridViewImageColumn

Cita:
Iniciado por javidotnet Ver Mensaje
Hola Zyrah, me alegro que hayas resuelto el problema! Te cuento donde estaba el fallo, resulta que la variable img es del tipo objeto DataGridViewImageColumn y su propiedad Image es única para todas las celdas de dicha columna, en otras palabras: cuando vos deseás que todas las celdas de la columna tengan la misma imagen, entonces debes usar dicha propiedad Image. Pero vos querías que cada celda tuviese una imagen propia, por lo tanto para eso hay que utilizar la propiedad Value de cada celda en particular. Espero haberte aclarado la cuestión, cualquier duda, preguntá.
¡Saludos cordiales desde Argentina!
Muchas gracias por la explicación! la verdad que así da gusto porque he aprendido algo nuevo y razonando qué hice mal y el por qué que es lo importante =)

He trabajado con datagridview a menudo pero nunca tuve que usar este tipo de columna y ahora cuando me lo explicaste tiene toda la lógica saludos!

Etiquetas: datagridview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:32.