نمایش تصاویر پایگاه داده در یک کنترل ListView در C #
سلام دوستان
این مثال نشان می دهد چگونه می تونید تصاویر پایگاه داده را در یک کنترل ListView نمایش دهید. به سادگی تصاویری را که از دیتابیس می خواهید دریافت کنید, و اونا رو تو لیست ویو به اشکال مختلف نمایش دهید
مراحل انجام کار برای دریافت و نمایش تصاویر از دیتابیس
رکوردهای کتاب را از پایگاه داده بخوانید.
تصویر را در هر رکورد از فیلد مربوطه میگیریم
برای نمایش هر تصویر از ای دی یا کلید اون ردیف استفاده میکنیم
هر تصویر رو در لیست ویورا با استفاده از عنوان کتاب به عنوان کلید اصلی نمایش میدیم
// نام پایگاه داده را میگیریم
// , و همون مسیری که در پوشه بین هست رو بهش میدیم
string db_name = Application.StartupPath +
"\\books_with_images.mdb";
// اتصال به دیتابیس
using (OleDbConnection conn =
new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + db_name + ";" +
"Mode=Share Deny None"))
{
// دریافت اطلاعات کتاب
OleDbCommand cmd = new OleDbCommand(
"SELECT Title, URL, ISBN, CoverUrl, " +
"Pages, Year, CoverImage FROM Books ORDER BY Year DESC",
conn);
conn.Open();
using (OleDbDataReader reader = cmd.ExecuteReader())
{
lvwBooks.Items.Clear();
imlLargeIcons.Images.Clear();
imlSmallIcons.Images.Clear();
while (reader.Read())
{
// ساخت ابجکت تصویر
if (!reader.IsDBNull(6))
{
// دریافت تصاویر
Bitmap bm = BytesToImage((byte[])reader.GetValue(6));
float source_aspect = bm.Width / (float)bm.Height;
// ساخت تصاویر بزرگ
AddImageToImageList(imlLargeIcons,
bm, reader[0].ToString(),
imlLargeIcons.ImageSize.Width,
imlLargeIcons.ImageSize.Height);
// ساخت تصاویر کوچیک
AddImageToImageList(imlSmallIcons,
bm, reader[0].ToString(),
imlLargeIcons.ImageSize.Width,
imlLargeIcons.ImageSize.Height);
}
// اضافه کردن اطلاعات به لیست
lvwBooks.AddRow(
reader[0].ToString(), // کلید تصویر
reader[0].ToString(), // عنوان
reader[1].ToString(), // ادرس
reader[2].ToString(), // شابک
reader[3].ToString(), // جلد
reader[4].ToString(), // صفحات
reader[5].ToString()); // سال
}
}
}
این کد به پایگاه داده دسترسی دارد (باید از آن قسمت برای اتصال به پایگاه داده خود استفاده کنیم اگر از دسترسی استفاده نمی کنیم و یا اگر نیاز به استفاده از یک ارائه دهنده متفاوت داشته باشیم.) سپس یک جستجو ی پایگاه داده را اجرا می کنیم که داده ها را از جدول کتاب ها انتخاب می کند. زمینه CoverImage تصاویر پوشش جلد کتاب را نگه می دارد
و کد کنترل های ListView و ImageList را پاک می کند و سپس وارد حلقه زمانی می شود که تا زمانی که پرس و جو یک سطر دیگر را به دست می دهد، اجرا می شود.
در داخل حلقه، کد از روش IsDBNull خواننده برای دیدن اینکه آیا تصویر خالی است، استفاده می کند. (اگر هیچ تصویری در پایگاه داده وجود نداشته باشد، کار زیادی نداره)
و یا اگه تصویر وجود داشته باشه، برنامه برای تبدیل داده ها در آن زمینه به Bitmap، از روش BytesToImage استفاده می کند. سپس کد دو بار به روش AddImageToImageList را برای ایجاد نسخه های بزرگ و کوچک تصویر پوشش و اضافه کردن آنها به کنترل های ImageList برنامه فراخوانی می کند. و تصاویر در کنترل های ImageList با عنوان کتاب به عنوان یک کلید ذخیره می شوند.
پس از ایجاد تصاویر، برنامه از روش افزودنی AddRow برای ایجاد ردیف ListView استفاده می کنه
کد زیر روش BytesToImage را نشون میده
// آرایه بایت را به یک تصویر تبدیل میکنه
private Bitmap BytesToImage(byte[] bytes)
{
using (MemoryStream image_stream = new MemoryStream(bytes))
{
Bitmap bm = new Bitmap(image_stream);
return bm;
}
}
این روش یک MemoryStream را ایجاد می کند که بایت هایی را که داده های تصویر را نگه می دارند، نشون میده این سازنده Bitmap را جریان می دهد و شیBitmap ساخته میشه
کد زیر روش AddImageToImageList را نشان می دهد
// مقیاس تصویر را به اضافه میکنه FitList
private void AddImageToImageList(ImageList iml, Bitmap bm,
string key, float wid, float hgt)
{
// ساخت نمونه از بیت مپ
Bitmap iml_bm = new Bitmap(
iml.ImageSize.Width,
iml.ImageSize.Height);
using (Graphics gr = Graphics.FromImage(iml_bm))
{
gr.Clear(Color.Transparent);
gr.InterpolationMode = InterpolationMode.High;
//دریافت اندازه تصویر.
RectangleF source_rect = new RectangleF(
0, 0, bm.Width, bm.Height);
RectangleF dest_rect = new RectangleF(
0, 0, iml_bm.Width, iml_bm.Height);
dest_rect = ScaleRect(source_rect, dest_rect);
gr.DrawImage(bm, dest_rect, source_rect,
GraphicsUnit.Pixel);
}
// اضافه کردن تصویر به لیست
iml.Images.Add(key, iml_bm);
}
دریافت عکس از دیتابیس,نمایش تصاویر در لیست ویو,نمایش تصویر از پایگاه داده,نمایش عکس تو لیست ویو,نمایش عکس در سی شارپ