C sharp - mostrar imagen de base de datos en gridview

   
Vista:

mostrar imagen de base de datos en gridview

Publicado por Rodri (1 intervención) el 14/02/2010 13:03:43
Hola, quisiera pedir ayuda para el siguiente problema con el que me topado:
Quiero mostrar en un gridview los datos que tengo en una bd access, un de las columnas contiene imagenes guardadas como Objeto OLE y me da un error en:
dtRow["Imagenlibro"] = imagen;

-ERROR: El tipo de valor no coincide con el tipo de columnaNo se puede almacenar <System.Drawing.Bitmap> en la columna Imagenlibro. El tipo esperado es ImageField.-

Les adjunto parte del programa para ver si alguien sabe la solución.
Gracias por adelantado

private bool getThumbnailImageAbort()
{
return false;
}

public void llenarotrogrid2()
{
DataSet ds = new DataSet();
ds.Tables.Add();
ds.Tables[0].Clear();
ds.Tables[0].TableName = "libro";
ds.Tables[0].Columns.Add("Imagenlibro", typeof(ImageField));
ds.Tables[0].Columns.Add("Apellido1");
ds.Tables[0].Columns.Add("Apellido2");
ds.Tables[0].Columns.Add("Nombre");
ds.Tables[0].Columns.Add("Titulo");
ds.Tables[0].Columns.Add("Sinapsis");

int i = 0; int j;
OleDbConnection cn;
OleDbCommand cmd;
cn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source =" + rutabasedatos + "libros.mdb");
cmd = new OleDbCommand("select Imagenlibro,Apellido1,Apellido2,Nombre,Titulo,Sina psis from libro", cn);
cn.Open();
OleDbDataReader lector = null;
lector = cmd.ExecuteReader();
byte[] aBytes = null;

while (lector.Read())
{
DataRow dtRow = ds.Tables[0].NewRow();
if (lector.GetValue(0).ToString() != "")
{
//lleno el campo Imagenlibro
aBytes = (byte[])lector.GetValue(0);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write(aBytes, 0, aBytes.GetUpperBound(0) + 1);
System.Drawing.Image imagen = System.Drawing.Image.FromStream(ms);
imagen.GetThumbnailImage(50, 50, getThumbnailImageAbort, IntPtr.Zero);
ms.Close();
dtRow["Imagenlibro"] = imagen; // "aquí es donde está el problema"

}
for (j = 1; j < 6; j++)
{

if (lector.GetString(j) != "")
{
switch (j)
{
case 1:
dtRow["Apellido1"] = lector.GetString(j);
break;
case 2:
dtRow["Apellido2"] = lector.GetString(j);
break;
case 3:
dtRow["Nombre"] = lector.GetString(j);
break;
case 4:
dtRow["Titulo"] = lector.GetString(j);
break;
case 5:
dtRow["Sinapsis"] = lector.GetString(j);
break;
}
}
}
ds.Tables[0].Rows.Add(dtRow);
i++;
}
cn.Close();
lector.Close();
GridView1.DataSource = ds;
GridView1.DataMember = "libro";
GridView1.DataBind();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder