الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن عرض أكثر من صورة فى الفورم الواحدة بناء على كود المريض ؟

مغلقمُجاب
بدأه red_scorpion1 في 14 فبراير 2013 · 10 رد · 2,219 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

لدى برنامج يقوم من خلاله الطبيب بتعبئة بيانات المريض من بياناته والحالة المرضية وصور الأشعات الخاصة بالحالة وصور للحالة نفسها

 

كيف يمكنن عند الإستعلام عن مريض عن طريق كود المريض أو إسمه أن أقوم بعرض جميع الصور الخاصة به فى الفورم ؟

 

نصحنى أحد الشخاص بإستخدام أدوات خارجية من Devexpress image slide ولكنى إستطعت بها عرض الصور عن طريق تحديد المسار الخاص بالصورة ولا أعرف كيف يمكن تعبئتها من قاعدة البيانات بناء على نتيجة البحث أو إن كان هناك أى حلول أخرى فأتمنى التوضيح ؟؟؟

 

الكود الذى إستخدمته مع الأداة image slide هو التالى

 

            imageSlider1.Images.Add(Image.FromFile(@"c:\Images\1.jpg"));
            imageSlider1.Images.Add(Image.FromFile(@"c:\Images\2.jpg"));
            imageSlider1.Images.Add(Image.FromFile(@"c:\Images\3.jpg"));
            imageSlider1.Images.Add(Image.FromFile(@"c:\Images\4.jpg"));
            //Increase image sliding animation duration (default is 700 ms)
            imageSlider1.AnimationTime = 1200;
            //Display images at the center of ImageSlider in their original size
            imageSlider1.LayoutMode = DevExpress.Utils.Drawing.ImageLayoutMode.MiddleCenter;
            //...
            //Slide to the next image
            imageSlider1.SlideNext();

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 14 فبراير 2013 في 22:46

#2

السلام عليكم ..

  1. سيكون الكود شبيها بمايلي :
    SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT pic FROM imageTest WHERE pic_id = 1", yourConnectionReference));
    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);
    
    if (dataSet.Tables[0].Rows.Count == 1)
    {
        Byte[] data = new Byte[0];
    	if(!Convert.IsDBNull(dataSet.Tables[0].Rows[0]["pic"]))
    	{
        data = (Byte[])(dataSet.Tables[0].Rows[0]["pic"]);
        MemoryStream mem = new MemoryStream(data);
        //yourPictureBox.Image= Image.FromStream(mem);
    	imageSlider1.Images.Add(Image.FromStream(mem));
    	}
    }

     

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
houssam11350_11350 كتب:

السلام عليكم ..

  1. سيكون الكود شبيها بمايلي :
    SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT pic FROM imageTest WHERE pic_id = 1", yourConnectionReference));
    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);
    
    if (dataSet.Tables[0].Rows.Count == 1)
    {
        Byte[] data = new Byte[0];
    	if(!Convert.IsDBNull(dataSet.Tables[0].Rows[0]["pic"]))
    	{
        data = (Byte[])(dataSet.Tables[0].Rows[0]["pic"]);
        MemoryStream mem = new MemoryStream(data);
        //yourPictureBox.Image= Image.FromStream(mem);
    	imageSlider1.Images.Add(Image.FromStream(mem));
    	}
    }

     

 

السلام عليكم

 

اشكرك اخى الفاضل على محاولتك مساعدتى ولكن من فضلك ؟

 

mem هنا هل اخذ مسار الصورة من data كما فهمت يعنى هل mem هو الذى يحمل الصورة ؟

 

هل هنا تم تحديد row معين ام انه سيتم عرض الكل ؟

 

2. هل اقوم بتسجيل اسم الصورة فقط فى قاعدة البيانات واقوم بربطها بكود المريض ام ان هناك طريقة اخرى ؟

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 15 فبراير 2013 في 19:56

#4

السلام عليكم ..

  1. الكود السابق يفترض أن الصورة كلها مخزنة في قاعدة البيانات و لكن البعض لا يفضل تخزين الصور داخل القاعدة حتى لا يزداد حجمها , يمكنك فقك تخزين مسار الصورة .
  2. المثال السابق يفترض وجود صورة واحدة , لكن يمكن جعله لأكثر من صورة .
  3. ما هي قاعدة البيانات المستخدمة و ما هي بنية الجدول الذي تخزن فيه الصور ..؟

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5
houssam11350_11350 كتب:

السلام عليكم ..

  1. الكود السابق يفترض أن الصورة كلها مخزنة في قاعدة البيانات و لكن البعض لا يفضل تخزين الصور داخل القاعدة حتى لا يزداد حجمها , يمكنك فقك تخزين مسار الصورة .
  2. المثال السابق يفترض وجود صورة واحدة , لكن يمكن جعله لأكثر من صورة .
  3. ما هي قاعدة البيانات المستخدمة و ما هي بنية الجدول الذي تخزن فيه الصور ..؟

 

السلام عليكم

 

قاعدة البيانات المستخدمة هى SQL Server

قمت بتصميم جدولين 

الأول: كود المريض - اسمه - العنوان - الوزن - الحالة المرضية ....

الثانى: كود المريض - موقع الصورة ( هذا ماساقوم بعمله وهو تخزين مسار الصورة )

#6

السلام عليكم ..

سيكون الكود بالشكل :

SqlConnection connection = new SqlConnection(@"Server=.\sqlexpress;Database=DB02;Trusted_Connection=Yes;");
            SqlCommand command = new SqlCommand("SELECT PatientID , ImagePath FROM PatentPhoto WHERE PatientID=@PatientID;");

            command.Parameters.AddWithValue("@PatientID", 1);
            command.Connection = connection;
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable datatable = new DataTable();
            adapter.Fill(datatable);
            dataGridView2.DataSource = datatable;
            foreach (DataRow row in datatable.Rows)
            {
                if (!Convert.IsDBNull(row["ImagePath"]))
                {
                    MessageBox.Show((String)row["ImagePath"]);
                    imageSlider1.Images.Add(Image.FromFile((String)row["ImagePath"]));
                }
            }
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

أخي الفاضل حسام

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

 

أعذرني علي فتح الموضوع مرة أخري

 

لكن واجهتني مشكلة أثناء استرجاع الصورة مرة أخري من قاعده البيانات

 

أولاً هذا الاجراء يقوم بجلب البيانات من الجدول بناء علي شرط الكود

 

 

Alter Proc AkaratGetImages

@TransCode int

as
begin

Select TransCode,TransPicLayout,TransPic from Tbl_AkarImages where (TransCode=@TransCode)


end

 

استخدمت هذا الكود لاسترجاع البيانات فظهر لي الخطأ التالي

 

 

 Dim cmd As New SqlCommand("AkaratGetImages", sqlcon)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@TransCode", TextBox1.Text)

        cmd.Connection = sqlcon
        Dim da As New SqlDataAdapter(cmd)

        Dim dt As New DataTable

        da.Fill(dt)
        DataGridView1.DataSource = dt

        For Each row As DataRow In dt.Rows
            If Not Convert.IsDBNull(row("TransPicLayout")) Or Not Convert.IsDBNull(row("TransPic")) Then
                MessageBox.Show(DirectCast(row("TransPicLayout"), [String]))
                MessageBox.Show(DirectCast(row("TransPic"), [String]))
                ImageSlider1.Images.Add(Image.FromFile(DirectCast(row("TransPicLayout"), [String])))
                ImageSlider2.Images.Add(Image.FromFile(DirectCast(row("TransPic"), [String])))
            End If
        Next

 

post-46243-0-55317000-1361358832_thumb.j

 

حاولت تغيير اسلوب العرض واستخدمت DataReader وتم عرض الصور لكن لا استطيع تصفح الصور الموجوده في السجلين رقم 2 كما هو موضح

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

وعدد الصور بداخلهم 4 صور 

 

 

       Dim cmd As New SqlCommand("AkaratGetImages", sqlcon)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@TransCode", TextBox1.Text)

        cmd.Connection = sqlcon
        Dim da As New SqlDataAdapter(cmd)

        Dim dt As New DataTable

        da.Fill(dt)
        DataGridView1.DataSource = dt


        sqlcon.Open()


        Dim GetData As SqlDataReader = cmd.ExecuteReader
        GetData.Read()

        Dim TransPicLayout = GetData("TransPicLayout")
        Dim TransPic1 = GetData("TransPic")


        If Not ImageSlider1 Is System.DBNull.Value Then
            Dim data As Byte() = DirectCast(TransPicLayout, Byte())
            Dim ms As New MemoryStream(data)
            ImageSlider1.Images.Add(Image.FromStream(ms))


            If Not ImageSlider2 Is System.DBNull.Value Then
                Dim data2 As Byte() = DirectCast(TransPic1, Byte())
                Dim ms2 As New MemoryStream(data2)
                ImageSlider2.Images.Add(Image.FromStream(ms2))

            End If
        End If

        sqlcon.Close()

 

post-46243-0-94477400-1361359027_thumb.j

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

لقد قمت بتعديل الكود و الان لا يوجد أخطاء اثناء استرجاع الصور لكن عندما اضغط علي السهم الجانبي لاستعراض الصورة التالية يقوم بتكرار الصورة الحالية ولا يعرض الصورة التي تليها

 

 

Dim cmd As New SqlCommand("AkaratGetImages", sqlcon)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@TransCode", TextBox1.Text)


        cmd.Connection = sqlcon
        Dim da As New SqlDataAdapter(cmd)


        Dim dt As New DataTable


        da.Fill(dt)
        DataGridView1.DataSource = dt

        sqlcon.Open()

        Dim GetData As SqlDataReader = cmd.ExecuteReader
        GetData.Read()


        For Each row As DataRow In dt.Rows
            If Not Convert.IsDBNull(row("TransPicLayout")) Or Not Convert.IsDBNull(row("TransPic")) Then


                Dim TransPicLayout = GetData("TransPicLayout")
                Dim data As Byte() = DirectCast(TransPicLayout, Byte())


                Dim TransPic = GetData("TransPic")
                Dim data2 As Byte() = DirectCast(TransPic, Byte())


                Dim ms As New MemoryStream(data)
                ImageSlider1.Images.Add(Image.FromStream(ms))


                Dim ms2 As New MemoryStream(data2)
                ImageSlider2.Images.Add(Image.FromStream(ms))
            
            End If
        Next

        sqlcon.Close()

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9 أفضل إجابة

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

أهلا بك اخي محمد ..

  1. الخطأ الأول الذي ظهر معك سببه أن تحاول قسر (Cast)  متحول من نوع ()byte إلى النوع String  و هذه غير ممكن .
  2. في مثالنا , نحن لا نخزن الصورة, بل مسار الصورة و هو من نوع varchar  أم في مثالك فأنت تخزن كامل الصورة في قاعدة البيانات .
  3. المشكلة في الكود الثاني  أنك لا تقوم بالمرور على كل السجلات .. بل تكتفي بالمرور على السجل الأول و الحل يكون بحلقة while  تمر على كل البيانات الموجودة داخل الــ Reader كمايلي :
    Dim cmd As New SqlCommand("AkaratGetImages", sqlcon)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@TransCode", 2)
            cmd.Connection = sqlcon
            Dim da As New SqlDataAdapter(cmd)
            Dim dt As New DataTable
    
            da.Fill(dt)
            DataGridView1.DataSource = dt
            sqlcon.Open()
            Dim GetData As SqlDataReader = cmd.ExecuteReader
            While GetData.Read()
                Dim TransPicLayout = GetData("TransPicLayout")
                Dim TransPic1 = GetData("TransPic")
                If Not Convert.IsDBNull(TransPicLayout) Then
                    Dim data As Byte() = DirectCast(TransPicLayout, Byte())
                    Dim ms As New MemoryStream(data)
    
                    ImageSlider1.Images.Add(Image.FromStream(ms))
                End If
    
                If Not Convert.IsDBNull(TransPic1) Then
                    Dim data As Byte() = DirectCast(TransPic1, Byte())
                    Dim ms As New MemoryStream(data)
    
                    ImageSlider2.Images.Add(Image.FromStream(ms2))
                End If
            End While
            sqlcon.Close()

     

  4. الــ ImageSlider هو عنصر موجود على الفورمو بالتالي لا يمكن ان يكون له القيمة System.DBNull.Value بأي حال من الأحول  .

بالتوفيق

------------------------------

تعديل : لم ارى مشاركتك الثانية إلا بعد أن اضفت مشاركتي ..

لكن الخطأ هنا :

Dim ms2 As New MemoryStream(data2)
                ImageSlider2.Images.Add(Image.FromStream(ms))

 والمفروض :

                ImageSlider2.Images.Add(Image.FromStream(ms2))

بالتوفيق

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 20 فبراير 2013 في 16:56

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#10

هذا ما تنبهت له لكنك سبقتني بالاجابة

الــ ImageSlider هو عنصر موجود على الفورمو بالتالي لا يمكن ان يكون له القيمة System.DBNull.Value بأي حال من الأحول  .

بارك الله فيك دائما سباق بالخير

 

علي جانب المشاركة لاحظت ان المنتدي لم يعد يرسل تنبيهات علي البريد كالعاده مما أثر علي متابعتي للمنتديات كما يجب ... اذهب للوكر ستجدني هناك بمشاركة اتحدث عن هذا الامر

 

شكرا لك مرة أخري

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#11

السلام عليكم ..

بارك الله بك أخي محمد ..

 

اقتباس

علي جانب المشاركة لاحظت ان المنتدي لم يعد يرسل تنبيهات علي البريد كالعاده مما أثر علي متابعتي للمنتديات كما يجب ... اذهب للوكر ستجدني هناك بمشاركة اتحدث عن هذا الامر

 أنا شخصيا استخدم التنبيهات في المنتدى نفسه و أتابع المواضيع الجديدة من خلال رابط (جديد المنتدى الموجود في الشريط العلوي ) .و لم اعد استخدم طريقة الايميل ..

شكرا لك .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…