PDA

View Full Version : سوال: چگونه میتوان عکس ذخیره شده در دیتابیس را در پیکپر باکس نمایش داد (بوسیله توابع linq to sql)



alexmcse
یک شنبه 03 شهریور 1392, 18:52 عصر
سلام
چند تا عکس در دیتابیس ذخیره شده است
این عکس ها را در دیتا گرید نمایش دادم
حالا می خواهم روی یک سطر گرید کلیک کنم عکس مورد نظر همان سطر در پیکچر باکس نمایش داده شود
بوسیله توابع linq to sql
چکار کنم

تشکر

morteza561
یک شنبه 03 شهریور 1392, 19:59 عصر
سلام دوست عزیز.

من از این کد استفاده کردم و جواب گرفتم. یه تست کن:


var DB = new DataClasses1DataContext();
var query = (from obj in DB.Students
where obj.ID == Convert.ToInt32(txtID.Text)
select obj.Image).Single();
Binary source = query;
if (source != null)
{
pictureBox1.Image = ConvertToImage(source);
}


من ترجیح دادم عکس رو از خود دیتابیس بگیرم تا از دیتاگرید. برای گرفتن سطری که توی دیتاگرید کلیک شده هم که میتونی از CurrentRow استفاده کنی.

موفق باشی ...

mousa1992
یک شنبه 03 شهریور 1392, 20:06 عصر
متد اماده جهت تبدیل بایت های عکس به bitmap , ... :چشمک:


private System.Drawing.Bitmap BytesTImage(byte[] content)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(content);
return (System.Drawing.Bitmap)System.Drawing.Image.FromSt ream(ms);
}


از datasource گرید بایت های عکستو میتونی بگیری

alexmcse
دوشنبه 04 شهریور 1392, 07:52 صبح
سلام دوست عزیز.

من از این کد استفاده کردم و جواب گرفتم. یه تست کن:


var DB = new DataClasses1DataContext();
var query = (from obj in DB.Students
where obj.ID == Convert.ToInt32(txtID.Text)
select obj.Image).Single();
Binary source = query;
if (source != null)
{
pictureBox1.Image = ConvertToImage(source);
}


من ترجیح دادم عکس رو از خود دیتابیس بگیرم تا از دیتاگرید. برای گرفتن سطری که توی دیتاگرید کلیک شده هم که میتونی از CurrentRow استفاده کنی.

موفق باشی ...

این خط ایراد میگیرد

pictureBox1.Image = ConvertToImage(source);

تابع ConvertToImage را نمیشناسد

تشکر میکنم

alexmcse
دوشنبه 04 شهریور 1392, 07:58 صبح
متد اماده جهت تبدیل بایت های عکس به bitmap , ... :چشمک:


private System.Drawing.Bitmap BytesTImage(byte[] content)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(content);
return (System.Drawing.Bitmap)System.Drawing.Image.FromSt ream(ms);
}


از datasource گرید بایت های عکستو میتونی بگیری

چطور مقدار دهی کنم (تابع )
مثالی بزنید
(چی بنویسم)BytesTImage
تشکر

morteza561
دوشنبه 04 شهریور 1392, 09:04 صبح
این خط ایراد میگیرد

pictureBox1.Image = ConvertToImage(source);

تابع ConvertToImage را نمیشناسد

تشکر میکنم

آخ آخ. شرمندم داداش :لبخند:

بیا. اینم تابع مذکور:


public static Image ConvertToImage(Binary iBinary)
{
var arrayBinary = iBinary.ToArray();
Image rImage = null;

using (MemoryStream ms = new MemoryStream(arrayBinary))
{
rImage = Image.FromStream(ms);
}
return rImage;
}


در ضمن، کتابخونه های System.IO، و System.Data.Linq رو هم باید اون بالا اضافه کنی

یا علی ...

mousa1992
دوشنبه 04 شهریور 1392, 12:10 عصر
سرچ کردم متوجه شدم که به صورت زیر راحت میتونی عکس گرید رو بدی به pictureBox


pictureBox1.Image = (Bitmap)dataGridView1.Rows[e.RowIndex].Cells[شماره و یا نام ستونی که شمال عکس هست].Value;



کدهای بالا رو توی رویداد CellClick باید بنویسی

در مورد سوالتون از پارامتری که به متد باید فرستاده بشه : از نوعش مشخصه دیگه ؛ ارایه ای از نوع بایت هست که تبدیل میکنه به bitmap

موفق باشی

khokhan
دوشنبه 04 شهریور 1392, 13:38 عصر
سلام
چند تا عکس در دیتابیس ذخیره شده است
این عکس ها را در دیتا گرید نمایش دادم
حالا می خواهم روی یک سطر گرید کلیک کنم عکس مورد نظر همان سطر در پیکچر باکس نمایش داده شود
بوسیله توابع linq to sql
چکار کنم

تشکر
.................................................. ..............................؟؟؟؟؟؟؟؟

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
int id = Convert.ToInt16(dataGridView1.CurrentRow.Cells[0].Value);
var result = (from zirna in db.zirnas
where zirna.id == (id)

select Image.FromStream(new MemoryStream(zirna.photo.ToArray())));
foreach (Image image in result)
{

pictureBox1.Image = (image);
}


}