...بارگذاری

سلام دوستان

این مثال نشان می دهد چگونه می تونید تصاویر پایگاه داده را در یک کنترل ListView نمایش دهید.  به سادگی تصاویری را که از دیتابیس می خواهید دریافت کنید, و اونا رو تو لیست ویو به اشکال مختلف نمایش دهید
مراحل انجام کار برای دریافت و نمایش تصاویر از دیتابیس
رکوردهای کتاب را از پایگاه داده بخوانید.
تصویر را در هر رکورد از فیلد مربوطه میگیریم
برای نمایش هر تصویر از ای دی یا کلید اون ردیف استفاده میکنیم



هر تصویر رو در لیست ویورا با استفاده از عنوان کتاب به عنوان کلید اصلی نمایش میدیم  


// نام پایگاه داده را میگیریم
// , و همون مسیری که در پوشه بین هست رو بهش میدیم
string db_name = Application.StartupPath +
// اتصال به دیتابیس
"\\books_with_images.mdb"; using (OleDbConnection conn =
"Data Source=" + db_name + ";" +
new OleDbConnection( "Provider=Microsoft.ACE.OLEDB.12.0;" +
OleDbCommand cmd = new OleDbCommand(
"Mode=Share Deny None")) { // دریافت اطلاعات کتاب
"Pages, Year, CoverImage FROM Books ORDER BY Year DESC",
"SELECT Title, URL, ISBN, CoverUrl, " + conn); conn.Open();
imlLargeIcons.Images.Clear();
using (OleDbDataReader reader = cmd.ExecuteReader()) { lvwBooks.Items.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,
AddImageToImageList(imlSmallIcons,
bm, reader[0].ToString(), imlLargeIcons.ImageSize.Width, imlLargeIcons.ImageSize.Height); // ساخت تصاویر کوچیک bm, reader[0].ToString(),
reader[0].ToString(), // کلید تصویر
imlLargeIcons.ImageSize.Width, imlLargeIcons.ImageSize.Height); } // اضافه کردن اطلاعات به لیست lvwBooks.AddRow( 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,
using (Graphics gr = Graphics.FromImage(iml_bm))
iml.ImageSize.Height); { gr.Clear(Color.Transparent);
RectangleF source_rect = new RectangleF(
gr.InterpolationMode = InterpolationMode.High; //دریافت اندازه تصویر. 0, 0, bm.Width, bm.Height);
dest_rect = ScaleRect(source_rect, dest_rect);
RectangleF dest_rect = new RectangleF( 0, 0, iml_bm.Width, iml_bm.Height); gr.DrawImage(bm, dest_rect, source_rect,
}
GraphicsUnit.Pixel); } // اضافه کردن تصویر به لیست
iml.Images.Add(key, iml_bm);

تعداد نظرات 0

ارسال نظر

لطفا از ارسال نظرات حاوی تبلیغات و توهین خودداری فرمائید

ایمیل های شما در هر صورت محفوظ هست مگر در متن کامنت درج شود

Dear users, please refrain from posting comments about ads and sales links, and such
otherwise comments will be deleted Also your emails will be hidden