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

Processing Multiple Check Boxes In Sql Query

مغلق
بدأه mohammed nafa في 13 ديسمبر 2007 · 19 رد · 1,732 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

I'm having dificulty figuring out how to process multiple check boxes on a form.

Let's say I have three check boxes:

cbox1

cbox2

cbox3

The only way I can think of to code the possibilities is something like:

If cbox1.checked = true then

..........

End if

If cbox2.checked = true then

.......

End If

If cbox3.checked = true then

.......

End if

If cbox1.checked = true and cbox2.checked = true then

.......

end if

If cbox1.checked = true and cbox3.checked = true then

.......

end if

And the If/End IFs go on forever!

As you can see, if I have around 8 check boxes, doing it this way could lead

to tremendous amounts of coding. I'm sure there's a better, easier way,

right? I thought of using a select case but that wouldn't be much better I

don't think.

Terry in the dotnet.vb newsgroup gave this suggestion:

dim c as integer = 0

if cbox3.Checked = True then c = 1

if cbox2.Checked = True then c += 2

if cbox1.Checked = True then c+=4

Select Case c

Case 0 'No checks

Case 1 'cbox 3

Case 2 'cbox 2

Case 3 'cbox 2 & 3

Case 4 'cbox 1

Case 5 'cbox 1 & 3

Case 6 'cbox 1 & 2

Case 7 'cbox 1,2, & 3

End Select

I thought this was a great idea, but when you have 7 checkboxes, that still

leaves 128 Cases within a select case statement to program.

Is there a dynamic way to code this scenario that works with web forms?

The application is a query that runs against a single table in an access

database. Each check box represents each field they could chose from to show

up in a table or other style report.

eng. Mohammed Nafaa

#2

Hey ... Here's a simple code to handle many similar Controls in one single Method ...

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, _
	CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, _
	CheckBox5.CheckedChanged, CheckBox6.CheckedChanged

		Dim str As String = sender.Name()

		If sender.Checked = True Then
			Label1.Text = str
		End If

	End Sub

Good luck

تم تعديل هذه المشاركة بواسطة Fikou-sama في 13 ديسمبر 2007 في 17:22

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#3

اخي الكريم

ممكن توضيح اكثر لو سمحت

more explane

#4

الكود السابق يسمح لك بالتحكم في مجموعة من control التي هي من نفس النوع .. وفي هده الحالة نستطيع التحكم في 6 CheckBoxes و دلك بإضافة حدث مشترك بينها بعد Handles و دلك لتجنب كتابة الكود التالي 6 مرات

Private Sub CheckBox1_CheckedChanged(...) Handles CheckBox1.CheckedChanged
	....
End Sub

و هنا

Dim str As String = sender.Name()

عرفنا متغير من نوع String لنخزن فيه اسم sender و هو Object الدي اطلق الحدث الحالي (أنا هنا أردت فقط أن اظهر اسم checkbox الدي نتعامل معه لأبين أن هدا الإجراء صالح جميع checkbox) ويمكنك كتابة ما تشاء من الأكواد داخل هدا الإجراء

بالتوفيق

تم تعديل هذه المشاركة بواسطة Fikou-sama في 13 ديسمبر 2007 في 21:13

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#5

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

اخي الكريم بوركت لمجهوداتك

ولكن كما الاحظ في الكود المرفق انه يشترط به مشاركة جميع العناصر المرفقه مع بالشرط الذي يكون , بمعنا انه يجب تكرار الكود ليشمل جميع حالات الحدث التي تون هائلة عند ارتفاع عدد checkbox والتي في الغالب تكون بقيمة 2^ْX

(true,true,true)

(false,true,false)

(true,false,true)

(true,true,false)

(false,true,false)

(false,false,false)

وبالتالي تخيل كم سيتكرر الحدث كتابة

أرجو استمرار التواصل ومحاول الوصول للحل الأمث

م.محمد نفاع

#6
اقتباس
يجب تكرار الكود ليشمل جميع حالات الحدث التي تون هائلة عند ارتفاع عدد checkbox والتي في الغالب تكون بقيمة 2^ْX

(true,true,true)

(false,true,false)

(true,false,true)

(true,true,false)

(false,true,false)

(false,false,false)

وبالتالي تخيل كم سيتكرر الحدث كتابة

لم أفهم مادا تقصد .. لكن كما قلت لك .. sender يدل على checkbox التي قمنا بعمل check أو uncheck لها في الوقت الحالي .. إدن لن تقوم ب Test على جميع CheckBox ...

أعطني فكرة عما تريد عمله داخل الكود السابق و سأحاول مساعدتك في الكود إن شاء الله ...

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#7

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

أخي الكريم

أولا كل عام وانت بألف خير وانا سعيد للتواصل مع اناس يقدرون ما انعم الله عليهم ويحبون مساعدة الآخرين ومهما بلغنا من نتائج فانا شاكر لك ولاهتمامك

الموضوع بكل تفصيل هو انه لدي datagridveiw تحتوي على عامود لشركات محددة مربوط بكل شركة مجموعة من الاصناف , وهناك textbox يمكن المستخدم من البحث في هذه البيانات حسب الصنف وهنا الجوهر:

اني ارغب في ان يتمكن المستخدم من تحديد الشركات التي يرغب البحث من خلالها , فمثلا الشركة الأولى مع الرابع , أو الثالثة مع الخامسة مع كل ما امكن من احتمالات وذلك انه قد تم تحديد الشركات ب checkbox لكل شركة

أرجو ان يكون الشرح واضح

أخوك

م.محمد نفاع

فلسطين - جنين

#8
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _
		ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, _
		CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, _
		CheckBox5.CheckedChanged, CheckBox6.CheckedChanged

	' نفترض أن لدينا 5 chechbox
	Dim Count_Chkbx as Integer = 5

	Dim str As String()

	For i as Integer = 0 to 4
		If sender.Checked Then
			Redim Preserve str(i)
			str(i) = sender.Text
	   		End If
	Next

End Sub

لقد حصلنا الآن على أسماء الشركات المختارة و خزناها في مصفوفة .. و بما أني لا أعرف كيف ستكون طريقة بحثك فسأستعمل هده المصفوفة في استعلام بسيط

Dim company_name as String
company_name = Join(str, ",")

select * from Table_name where Company in (" & company_name & ")

هنا وضعنا عناصر المصفوفة في متغير من نوع String و فصلنا بين عناصرها ب "," لكي نستطيع استعمالها في استعلام

إدا كنت لم تبلغ مرادك فأعلمني و انا معك حتى نلقى حل آخر ..

و أرجو أن أكون قد أفدتك و لو بالقليل ..

تم تعديل هذه المشاركة بواسطة Fikou-sama في 15 ديسمبر 2007 في 00:48

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#9

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

اخي الكريم لدي الاستفسارات التالية:

1- قلت انه (لقد حصلنا الآن على أسماء الشركات المختارة و خزناها في مصفوفة ) فهل اسم الشركة والذي اشرت اليه ب sender.Text هو CheckBox1.text ?

2-انا أستخدم DataSet في عملية البحث اي FILLBY وبالتالي كتابة جملة البحث فيهافهل هذا ينطبق على مثالك ؟

وشكرا

#10

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

وكل عاموانتم بخير

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

ولكم جزيل الشكر والامتنان

م.محمد نفاع

#11

اخي الفاضل محمد

المسألة تعتمد بشكل كبير على تصميم قاعدة البيانات نفسها

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

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

لا تنسونا من الدعاء لوالدتي بالاجر و الشفاء

#12

بسم الله الرحمن الرحيم

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

الأخ الكريم

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

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

م.محمد نفاع

#13

آسف على التأخير أخي لأني كنت مشغول جدا بأحد المشاريع ...

اقتباس
1- ... فهل اسم الشركة والذي اشرت اليه ب sender.Text هو CheckBox1.text ?

sender هو checkbox .. إدن sender.text يمكن أن يكون CheckBox1.text أو CheckBox2.text او CheckBox3.text أو ...

اقتباس
2-انا أستخدم DataSet في عملية البحث اي FILLBY وبالتالي كتابة جملة البحث فيهافهل هذا ينطبق على مثالك ؟

نعم اخي .. يمكنك استخدام دلك الإستعلام أينما اردت ..

أعلمني بالنتيجة .. و إن شاء الله تكون إيجابية ..

تم تعديل هذه المشاركة بواسطة Fikou-sama في 17 ديسمبر 2007 في 15:47

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#14

اخي الفاضل محمد

بما انك تستخدم داتاسيت فتستطيع تعديل الاستعلام عليها ولتكون البارامترات التي فيه تمثل textbox و checkbox's كما يلي

SELECT	 Product, Company
FROM		 MyTbl
WHERE	 (Product = @Param1) AND (Company = @Param2 OR
					  Company = @Param3 OR
					  Company = @Param4 OR
					  Company = @Param5 OR
					  Company = @Param6 OR
					  Company = @Param7 OR
					  Company = @Param8 OR
					  Company = @Param9 OR
					  Company = @Param10 OR
					  Company = @Param11 OR
					  Company = @Param12 OR
					  Company = @Param13)

حيث Param1 ياخذ قيمة التيكست بوكس و البقية Param 2 to Param13 تمثل اسماء الشركات و تاخذ

قيمها من checkbox1.text to checkbox12 حيت قمت بتجربة الطريقه على 12 شركه

وميزة هذا الاستعلام انه سوف يتعامل فقط مع قيم checkbox المختارة اما الغير مختاره فسوف يسند لها قيم Null وبذلك تكون تخلصت من تفصيلها وتحديدها في الفورم

وبعد ذلك ادخل الكود التالي في زر تنفيذ عملية البحث

		Me.MyTblTableAdapter.FillBy(Me.MyDs.MyTbl, Me.TextBox1.Text, _
		CheckBox1.Text, CheckBox2.Text, CheckBox3.Text, CheckBox4.Text, _
		CheckBox5.Text, CheckBox6.Text, CheckBox7.Text, CheckBox8.Text, _
		CheckBox9.Text, CheckBox10.Text, CheckBox11.Text, CheckBox12.Text)

حيث myDs الداتاسيت

myTbl جدول الشركات و المنتجات

لا تنسونا من الدعاء لوالدتي بالاجر و الشفاء

#15

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

اخي الكريم

بارك الله فيك

ولكن هل يمكن ارفاق مثال بسيط ان امكن لان الامور تداخلت بعض الشيء معي

م.محمد نفاع

#16

السلام عليكم

أخي الفاضل هذا هو المثال الذي طبقت عليه الاوامر التي في الرد السابق

checkboxqry.rar

لا تنسونا من الدعاء لوالدتي بالاجر و الشفاء

#17

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

أخي الكريم بارك الله فيك

ولكن ارجو ان يتسع صدرك لي فيما ساقول

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

م.محمد نفاع

#18

بسم الله الرحمن الرحيم

اخواني الاعزاء

ارجو ممن يهمه الامر التواصل معي وتجربة المثال الذي اجتهد به الاخ الكريم ومحاولة معرفة اين الخطا ومحاولت المساعده او طرح افكار جديده ان امكن

اخوكم

م.محمد نفاع

#19

اخي محمد كل عام وانت و جميع الاعضاء و عامة المسلمين بالف خير

اخي الكريم في المثال السابق خطأ لأن قيم checkbox.text سواء اختيرت ام لا لا تتغير ولذالك كان لابد من عمل تغير على المثال كما يلي

عرفنا مصفوفه بعدد صناديق الاختيار Checkbox's

Dim i As Integer
		Dim txt(11) As String
		For i = 0 To UBound(txt)

بعد ذلك عملنا جمله شرطية تتاكد من جميع الكنترولز في النموذج فاذا كان الكنترول checkbox.checed تسند الاسم الظاهر عليه الا متعير اما اذا كان غير مختار فتسند لاشي لهذا المتغير

If TypeOf Me.Controls(i) Is CheckBox AndAlso CType(Me.Controls(i), CheckBox).Checked Then
				txt1 = CType(Me.Controls(i), CheckBox).Text
			Else
				If TypeOf Me.Controls(i) Is CheckBox AndAlso CType(Me.Controls(i), CheckBox).Checked = False Then
					txt1 = ""

				End If
			End If

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

			txt(i) = txt1
		Next i

وبعد ذلك نستخدم القيم التي في المصفوفه في تعبأة الداتا قريد

Me.MyTblTableAdapter.FillBy(Me.MyDs.MyTbl, Me.TextBox1.Text, _
		txt(0), txt(1), txt(2), txt(3), txt(4), txt(5), txt(6), txt(7), txt(8), txt(9), txt(10), txt(11))

والمثال في المرفقات بعد ان تم تعديله و التأكد من انه يعمل بالشكل المطلوب

checkboxqry.rar

لا تنسونا من الدعاء لوالدتي بالاجر و الشفاء

#20

بسم الله الرحمن الرحيم

الاخوه الأعزاء كل عام وانتم بالف خير والامة الاسلامية بخير وعزة وكرامة

شكر خاص الى اخي haz_mi (وكم كنت اتمنى لو استطيع مخاطبته باسمه الحقيقي)ولكل اخ عزيز اهتم بالموضوع بشكل خاص وبالمنتدى بشكل عام او ساعد او حاول المساعدة باي مساهمة كبيرة او صغيرة راجيا المولى ان يهدي الجميع لخير العمل وان يعلمنا ما ينفعنا وان ينفعنا بما يعلمنا اللهم آمين

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

اخوكم

م.محمد نفاع

فلسطين-جنين

جوال 00970599666328

email:mohammed@al-ghasaq.com

mohammed_n_a_n@yahoo.com

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

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