منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : [سؤال] عرض الصورة في الداتاغرايد فيو مع تقنية Dapper (/showthread.php?tid=36979)



عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - ابراهيم ايبو - 22-11-20

[attachment=26022]
السلام عليكم ورحمة الله وبركاته
اخوتي الاكارم لكم كل الشكر والعرفان سلفا
استخدم تقنية Dapper في حلب البيانات من الجدول ويتم العرض في الداتا غرايد فيو واحد الحقول هو صورة وقد جعلت حقله في الكلاس من نوع Object هكذا
كود :
public object PHOTO { get; set; }


المشكلة :
الان يتم عرض البيانات في الداتا غرايد عدا الصورة .... وانا اريد ان يتم اظهار الصورة في الحقل المسمى  Photo

بالنسبة للعرض من الداتا غرايد الى مربعات النصوص ومربع الصورة لامشكلة في ذلك وهذه هي الاكواد المستخدمة

كود :
private void Form1_Load(object sender, EventArgs e)
       {
           LoadData();
       }
       // تحميل الداتا
       void LoadData()
       {
           List<Cls_BIANKA> LstBIANKA = Cn.Query<Cls_BIANKA>("Select * From BIANKA").ToList();
           BS.DataSource = LstBIANKA;
           Dgv_Data.DataSource = BS;
         
       }
       // عرض الداتا من الداتا غرايد الى مربعات النصوص والصورة
       private void Dgv_Data_CellEnter(object sender, DataGridViewCellEventArgs e)
       {
           try
           {
               Pb_PHOTO.Image = null;
               Txt_ID.Text = Dgv_Data.CurrentRow.Cells[0].Value.ToString();
               Txt_NAME.Text = Dgv_Data.CurrentRow.Cells[1].Value.ToString();
               Txt_ADRESS.Text = Dgv_Data.CurrentRow.Cells[2].Value.ToString();
               Dtp_BDAY.Value = Convert.ToDateTime(Dgv_Data.CurrentRow.Cells[3].Value);
               byte[] Picture4 = (byte[])(Dgv_Data.CurrentRow.Cells[4].Value);
               MemoryStream ms4 = new MemoryStream(Picture4);
               Pb_PHOTO.Image = Image.FromStream(ms4);
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }


       }



RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - Anas Mahmoud - 22-11-20

لم اجربه فعلا لانه تنقصني كل التفاصيل ولكن هل جربت تحويل مصفوفة البايتات الى صور قبل اسنادها الى الداتا جريد فيو ؟ 

كود :
    void LoadData()
      {
       List<Cls_BIANKA> LstBIANKA = Cn.Query<Cls_BIANKA>("Select * From BIANKA").ToList();
       
       foreach(Cls_BIANKA x in LstBIANKA)
           {
               x.PHOTO = Image.FromStream(new MemoryStream(x.PHOTO));
           }    
       
       BS.DataSource = LstBIANKA;
       Dgv_Data.DataSource = BS;
      }



RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - ابراهيم ايبو - 23-11-20

السلام عليكم ورحمة الله وبركاته
بارك الله بك اخي انس على ردك ومساعدتك في ايجاد حل
اخي فكرت بنفس الفكرة لكن لم ينجح معي الامر ... والكود الذي اوردته في ردك اعطى خط احمر ولم يقبل
بالعادة يكون حقل الصورة في الجدول من نوع Image وعند استخدامنا تقنية ADO.net يتم انشاء العمود الذي يحوي الصورة في الداتاعرايد من نوع Image بشكل اتوماتيكي
لكن المشكلة في تقنية Dapper  اعتقد والله اعلم كون البروبرتي للصورة جعلته من نوع object بسبب انه لم يقبل نوع Image لذلك لن يتم عرض الصورة في الداتاغرايد لانها Object وليست Image
فإذا تمكننا من جعل نوع الداتاتايب للبروبرتي  يقبل image اظن ان المشكلة تحل (هذا مجرد رأي ) حاولت ان اجد مثالا فيه صورة في الانترنت لكني لم اوفق 
عل احد الاخوة الاكارم يدلي لنا بحل 
شكرا لك مرة اخرى ... دمت بخير


RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - mir2 - 23-11-20

نوع بيانات الصوره هو byte[]
كود :
public byte[] PHOTO { get; set; }

اضف شرط عدم وجود صوره
كود :
if (Dgv_Data.CurrentRow.Cells[4].Value != null) {
   byte[] Picture4 = (byte[])(Dgv_Data.CurrentRow.Cells[4].Value);
   MemoryStream ms4 = new MemoryStream(Picture4);
   Pb_PHOTO.Image = Image.FromStream(ms4);
} else { Pb_PHOTO.Image = null; }



RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - ابراهيم ايبو - 23-11-20

السلام عليكم ورحمة الله وبركاته
الاخ الكريم mir2 شكرا لك على مساهمتك ولكني انا اريد اظهار الصورة في عمود الداتا غرايد وليس مربع الصورة 
اظهار الصورة في مربع الصورة عند النقر على احد صفوف الداتاغرايد لامشكلة فيه
الحمد تم الحل واظهار الصورة بالرغم من عدم تعديل حرف واحد من الكود 
كل مافعلته الغاء ربط الداتاغرايد مع الكلاس ثم اعادة ربطه وتم اظهار الصورة في عمود الصورة (الامر غريب)
شكرا لكل من ساهم وحاول الاجابة 
هذه صورة للداتا غرايد


RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - mir2 - 23-11-20

انا اشرت لك الى نوع بيانات الصوره هو byte[]

الربط الاول اخذ انواع البيانات الاولى ولا يلتفت الى تعديلات الكلاس بعد الربط الاول

لهذا بعد ان الغيت الربط واعدت الربط هنا اخذ الداتاغرايد انواع البيانات من جديد

ما نوع بيانات الصوره بعد ان اعدت الربط ؟

بالنسبه لاظهار الصوره في مربع الصوره فهو سليم من البدايه فقط نبهت الى وضع شرط في حال لم تكن هناك صوره لاحد السجلات

كاضافه لتحسين مظهر
يمكن وضع هذا الكود بعد Dgv_Data.DataSource
كود :
Dgv_Data.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
Dgv_Data.RowTemplate.Height = 44;
((DataGridViewImageColumn)Dgv_Data.Columns[4]).ImageLayout = DataGridViewImageCellLayout.Zoom;
((DataGridViewImageColumn)Dgv_Data.Columns[4]).DefaultCellStyle.NullValue = new Bitmap(1, 1);

بامكانك ربط الداتاغرايد بالكلاس Cls_BIANKA اثناء التصميم فتظهر الاعمده تلقائيا وتجري عليها التعديلات التي وضعتها لك لتحسين المظهر بدون الحاجه للكود

اذا اردت الطريقه اخبرني


RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - ابراهيم ايبو - 23-11-20

السلام عليكم ورحمة الله وبركاته
اخي الكريم  mir2  نوع بيانات الحقل photo في الكلاس ابقيته كما هو object ولم اغيره ولم اغير شيئا سوى الغاء واعادة الربط
اما مظهر الداتاغرايد وتجميلها فهذه من الامور المعروفة لدي 
اسعدتني بمشاركتك دمت بخير



RE: عرض الصورة في الداتاغرايد فيو مع تقنية Dapper - mir2 - 23-11-20

وعليكم السلام ورحمة الله وبركاته

انا السعيد بفرصة مشاركة خبير مثلكم

تحياتي لكم