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

مشكلة مع الأداة checkedListBox

بدأه red_scorpion1 في 25 يوليو 2010 · 7 رد · 949 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أولاً : أود أن أشكر جميع أعضاء المنتدى الكريم على دعمهم المستمر كذلك على الموضوعات المتميزة بالمنتدى والتى هى عبارة عن أفكار غاية فى الروعة والجمال

لدى قاعدة بيانات SQL إسمها Pharma

وبها جدول الأصناف وإسمه item_data وبه حقول id , nm , company , kind , notes

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

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

اصناف نقدى

واصناف اجل

واصناف نقدى و اجل مع بعض

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

فمثلا عند إختيار نقدى و أجل يتم تسجل نوع السداد أجل فقط بقاعدة البيانات

فكيف يمكن حفظ أكثر من قيمة بقاعدة البيانات عن طريق الأداة checkedListBox وإن كان الموضوع عن طريق كود برمجى برجاء توضيحه حسب الحقول الموجوزدة لدى كذلك قاعدة البيانات

وأخيرا أقدم جزيل الشكر لهذا المنتدى العريق

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

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 25 يوليو 2010 في 02:40

#2

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

اخى صاحب السؤال ممكن تضيف سطر ثالث ويبقى عدد ال checkbox فى ال checklistbox هو 3 كاالاتى

1- نقدى

2- اجل

3- نقدى واجل

واظن هذا سهل وعندها يستطيع المستخدم فى حالة النقدى والاجل يختارها

اما اللى انت عاوزه بالضبط اظنه الاتى

 string str_pay = "";
            int array_item = 0;
            ArrayList arraylist = new ArrayList();

 //هذا السطر لتنظيف ال اراى قبل استخدامها حتى لو تم 
   //تنفيذ الكود مرتين عن طريق الخطا لايكرر القيم
            arraylist.Clear();

            //هذا التكرار سيكون على العناصر التى تم اختيارها فقط
            foreach (object item in checkedListBox1.CheckedItems)
            {
                //لاضافة العنصر الذى تم اختياره
                arraylist.Add(item);
               //حتى يتم كتابة العناصر بجوار بعضها فتصبح على هيئة  نقدى اجل
                str_pay += arraylist[array_item]; 

                //حتى يضع اسم العنصر المختار فى مكان جديد داخل  ال اراى
                array_item++;


            }

طيب لو عاوز تعملهم اثنين فقط ممكن تعمل checkbox العادى وتعمل منه 2 احدهما نقدى والاخر اجل وباستخدام جملة شرط تستطيع التحديد

   //متغير للاحتفاظ بنوع السداد
            string pay_type_value = "";

            if (checkBox1.Checked)
            {
                pay_type_value = "نقدى";
            }
            else if (checkBox2.Checked)
            {
                pay_type_value = "اجل";
            }
            else if (checkBox1.Checked && checkBox2.Checked)
            {
                pay_type_value = "نقدى و اجل";
            }
            //ثم عند حفظ البيانات تسند قيمة المتغير للحقل الذى فى قاعدة البيانات

و وفقك الله وايانا لما يحبه ويرضاه

تم تعديل هذه المشاركة بواسطة محب اصحاب النبى في 25 يوليو 2010 في 06:53

ان صنائع المعروف تقى مصارع السوء

وان كثرة الصلاة على النبى محمد صلى الله عليه وسلم

تُغفر بها الذنوب وتُقضى بها الحوائج وتُفرًّج بها الهموم.

اللهم صلى على سيدنا محمد وعلى اهله واصحابه اجمعيـــن

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

#3

محب اصحاب النبى كتب:

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

اخى صاحب السؤال ممكن تضيف سطر ثالث ويبقى عدد ال checkbox فى ال checklistbox هو 3 كاالاتى

1- نقدى

2- اجل

3- نقدى واجل

واظن هذا سهل وعندها يستطيع المستخدم فى حالة النقدى والاجل يختارها

اما اللى انت عاوزه بالضبط اظنه الاتى


string str_pay = "";
int array_item = 0;
ArrayList arraylist = new ArrayList();

//هذا السطر لتنظيف ال اراى قبل استخدامها حتى لو تم
//تنفيذ الكود مرتين عن طريق الخطا لايكرر القيم
arraylist.Clear();

//هذا التكرار سيكون على العناصر التى تم اختيارها فقط
foreach (object item in checkedListBox1.CheckedItems)
{
//لاضافة العنصر الذى تم اختياره
arraylist.Add(item);
//حتى يتم كتابة العناصر بجوار بعضها فتصبح على هيئة نقدى اجل
str_pay += arraylist[array_item];

//حتى يضع اسم العنصر المختار فى مكان جديد داخل ال اراى
array_item++;


}

طيب لو عاوز تعملهم اثنين فقط ممكن تعمل checkbox العادى وتعمل منه 2 احدهما نقدى والاخر اجل وباستخدام جملة شرط تستطيع التحديد


string pay_type_value = "";

if (checkBox1.Checked)
{
pay_type_value = "نقدى";
}
else if (checkBox2.Checked)
{
pay_type_value = "اجل";
}
else if (checkBox1.Checked && checkBox2.Checked)
{
pay_type_value = "نقدى و اجل";
}
//ثم عند حفظ البيانات تسند قيمة المتغير للحقل الذى فى قاعدة البيانات

   //متغير للاحتفاظ بنوع السداد

و وفقك الله وايانا لما يحبه ويرضاه

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

#4

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

ساكتب السطر يااخى والشرح يليه

string str_pay = "";

هذا السطر لانشاء سترنج سوف تحوى النتيجه التى توصلنا اليها اى العنصر الذى تم اختياره نقدى او اجل او نقدى اجل وجعلناه فارغا فى الاول حتى اذا مثلا ضغط على الزرار مرتين فى اول مره سيسجل مثلا نقدى ثم ضغط مره اخر ى تجد الناتج نقدى نقدى

 ArrayList arraylist = new ArrayList();

هذا السطر لعمل array list لحفظ اسماء العناصر يعنى بعد عمل ال foreach وانت كنت اخترت القيمه نقدى عندها يخزن كلمة نقدى فى اول عنصر فى ال arraylist

طيب انت اخترت نقدى و اجل ياخذ نقدى فى اول مكان فى ال array ثم ال اجل فى المكان الثانى وكانها

arraylist[0]=نقدى
arraylist[1]=اجل

وهذا ماينفذه السطر الاتى

arraylist.Add(item);

اما السطر الاتى

  str_pay += arraylist[array_item];

فهو لتخزين مافى ال array listفى ال string

مثلا العنصر الاول فى ال arraylist هو نقدىتصبح الجمله كانها

 str_pay= str_pay+نقدى

مما يجعل ال str_pay فى النهايه تساوى نقدى

طيب لو ال arralist فيها عنصرين يبقىفى اول دوره تكون نقدى والثانيه

 str_pay=نقدى+اجل

بصراحه مش عارف الشرح مفهوم ولا لا بس انا عملت لك مثال يوضح قصدى ارجو رؤيته ومتابعة الكود ساضع فيه breackpointحتى تتابعه معليك الا ان تضغط F11

حتى ينتقل بك خطوه بخطوه

واسال الله ان يوفقنا واياك لما يحب ويرضى

WindowsFormsApplication1.rar

تم تعديل هذه المشاركة بواسطة محب اصحاب النبى في 25 يوليو 2010 في 13:44

ان صنائع المعروف تقى مصارع السوء

وان كثرة الصلاة على النبى محمد صلى الله عليه وسلم

تُغفر بها الذنوب وتُقضى بها الحوائج وتُفرًّج بها الهموم.

اللهم صلى على سيدنا محمد وعلى اهله واصحابه اجمعيـــن

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

#5

محب اصحاب النبى كتب:

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

ساكتب السطر يااخى والشرح يليه

string str_pay = "";

هذا السطر لانشاء سترنج سوف تحوى النتيجه التى توصلنا اليها اى العنصر الذى تم اختياره نقدى او اجل او نقدى اجل وجعلناه فارغا فى الاول حتى اذا مثلا ضغط على الزرار مرتين فى اول مره سيسجل مثلا نقدى ثم ضغط مره اخر ى تجد الناتج نقدى نقدى

 ArrayList arraylist = new ArrayList();

هذا السطر لعمل array list لحفظ اسماء العناصر يعنى بعد عمل ال foreach وانت كنت اخترت القيمه نقدى عندها يخزن كلمة نقدى فى اول عنصر فى ال arraylist

طيب انت اخترت نقدى و اجل ياخذ نقدى فى اول مكان فى ال array ثم ال اجل فى المكان الثانى وكانها


arraylist[1]=اجل
arraylist[0]=نقدى

وهذا ماينفذه السطر الاتى

arraylist.Add(item);

اما السطر الاتى

  str_pay += arraylist[array_item];

فهو لتخزين مافى ال array listفى ال string

مثلا العنصر الاول فى ال arraylist هو نقدىتصبح الجمله كانها

 str_pay= str_pay+نقدى

مما يجعل ال str_pay فى النهايه تساوى نقدى

طيب لو ال arralist فيها عنصرين يبقىفى اول دوره تكون نقدى والثانيه

 str_pay=نقدى+اجل

بصراحه مش عارف الشرح مفهوم ولا لا بس انا عملت لك مثال يوضح قصدى ارجو رؤيته ومتابعة الكود ساضع فيه breackpointحتى تتابعه معليك الا ان تضغط F11

حتى ينتقل بك خطوه بخطوه

واسال الله ان يوفقنا واياك لما يحب ويرضى

WindowsFormsApplication1.rar

بدأت الفكرة تتضح أخى الكريم ولكن أنا لدى فى الفورم التى قمت بتصميمها زر حفظ فهل اقوم بوضع هذا الكود به ؟ وإن كان فهل يكون قبل أمر الحفظ أم بعد أم أنها لا تفرق؟؟

#6

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

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

ياخى بعد ما تستقبل القيمه فى المتغير str_pay تقوم باسنادها فى كود الحفظ

انظر جملة الحفظ فى قاعدة البيانات واسند اليها القيمه للحقل الذى فى القاعده

مثل الاتى

oledbcommand.paramaters.add("@pay",pay_str);

ارجو ان تكون وضحت الفكره

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

تم تعديل هذه المشاركة بواسطة محب اصحاب النبى في 26 يوليو 2010 في 17:21

ان صنائع المعروف تقى مصارع السوء

وان كثرة الصلاة على النبى محمد صلى الله عليه وسلم

تُغفر بها الذنوب وتُقضى بها الحوائج وتُفرًّج بها الهموم.

اللهم صلى على سيدنا محمد وعلى اهله واصحابه اجمعيـــن

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

#7

محب اصحاب النبى كتب:

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

ياخى بعد ما تستقبل القيمه فى المتغير str_pay تقوم باسنادها فى كود الحفظ

انظر جملة الحفظ فى قاعدة البيانات واسند اليها القيمه للحقل الذى فى القاعده

مثل الاتى

oledbcommand.paramaters.add("@pay",pay_str);

ارجو ان تكون وضحت الفكره

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

شكرا لدعمك إليك اخى الكريم الملف للتعديل واتمنى منك إبضاح الطريقتين خصوصا checkedlistbox

WindowsFormsApplication4.rar

#8

السلام عليكم

اقتباس
cmd.Parameters.Add("@pay_type", SqlDbType.VarChar, 50).Value = checkedListBox1.Text;

الصحيح باذن الله

           cmd.Parameters.Add("@pay_type", SqlDbType.VarChar, 50).Value = pay_str;

وطبعا المفروض يكون الكود اللى ارسلته من قبل يتم تنفيذه اولا حتى تكون ال pay_str قد حملت القيمه المطلوبه

وجزاك الله خيرا

ان صنائع المعروف تقى مصارع السوء

وان كثرة الصلاة على النبى محمد صلى الله عليه وسلم

تُغفر بها الذنوب وتُقضى بها الحوائج وتُفرًّج بها الهموم.

اللهم صلى على سيدنا محمد وعلى اهله واصحابه اجمعيـــن

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

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