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

اظهار اسئلو واجوبة باستخدام الRepeater

مغلق
بدأه in2sol في 25 يوليو 2007 · 8 رد · 1,157 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يقوم هذا الكود بعرض اسئلة باستخدام ال repeater وكذلك عرض الاجوبة لكل سؤال

إضافة الى استخلاص اجوبة المتسابقين واختيار الفائز منهم.

الادوات المستخدمة:

1. VS 2005

2. Sql server 2005

في البداية ساقوم بشرح الجداول المستخدمه لدينا.. وهي كالتالي:

1 . question

2 . answers

3 . users

كما هو واضح من الجداول فالعلاقة بين الجدولين question وanswers هي علاقة oneToMany اي ان كل سؤال يقابله اكثر من اجابة وكل اجابه يقابلها سؤال واحد... بالنسبة للاعمده فهي بالشكل التالي:

question:

questionID , questionText

answers:

answetID , questionID , answerText , answerStatus

users:

userID , userResult , userName , UserEmail

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

نبدا بسم الله:

في البداية وكما هو معلوم انالوظيفة الاساسيه للrepeater هي التكرار

ونحن هنا بصدد تكرار الاسئلة والاجوبه الموجوده في قاعدة بيانات , ولهذا فان افضل طريقة لذلك هي استخدام SqlDataSource يقوم باستدعاء الاسئلة والاجوبة ووضعها في الrepeater كما في الشكل التالي:

 

< asp:SqlDataSource ID = "sdsQuestions" runat = "server" ConnectionString = " < % $ ConnectionStrings:QandAdbConnectionString % > "
								SelectCommand = "SELECT [questionID] , [questionText] FROM [questions]" > 
						 < /asp:SqlDataSource >

ومن المهم قبل ان انسا ذلك ان نحتفظ بالquestionID لنجلب الاجوبة التابعة لكل سؤال على حده ..

نقوم بالبداية بانشاء الRepeater بالشكل التالي:

 
 < table border = "0" cellpadding = "0" cellspacing = "0" width = "90 % " > 
														 < asp:Repeater ID = "rptQandA" runat = "server" DataSourceID = "sdsQuestions" > 
																 < ItemTemplate > 
																		 < tr > 
																				 < td class = "question" dir = "ltr" align = "left" > 
																						 < br / > 

																						 < % #DataBinder.Eval(Container.DataItem , ("questionText")) % > 
																						 < asp:HiddenField ID = "hdnQuestionID" runat = "server" Value = ' < % #Eval("questionID") % > ' / > 
																				 < /td > 
																		 < /tr >								 
																 < /ItemTemplate > 
														 < /asp:Repeater > 
												 < /table >

كما يتضح فانني اقوم بحفظ قيمة الquestionID باستخدام HiddenField وذلك لغرض الاستعلام عن الاجوبة التابعة للسؤال.

بعد جلب الاسئلة نقوم باضافة SqlDataSource جديد لجلب الاجوبة وسيكون من داخل الrepeater بالشكل التالي:

 
 < asp:SqlDataSource ID = "sdsAnswers" runat = "server" ConnectionString = " < % $ ConnectionStrings:QandAdbConnectionString % > "
																				SelectCommand = "SELECT [answerText] , [answerID] , [answerStatus] FROM [Answer] WHERE ([questionID] = @questionID)" > 
																				 < SelectParameters > 
																						 < asp:ControlParameter ControlID = "hdnQuestionID" Name = "questionID" PropertyName = "Value"
																								Type = "Decimal" / > 
																				 < /SelectParameters > 
																		 < /asp:SqlDataSource >

وفي نهاية المطاف عرض الاجوبة سيكون باستخدام RadioButtonList بالشكل التالي:

 
 < tr > 
																				 < td class = "answer" dir = "ltr" align = "left" > 
																						 < asp:RadioButtonList ID = "rblAnswers" runat = "server" DataSourceID = "sdsAnswers" DataTextField = "answerText"
																								DataValueField = "answerID" > 
																						 < /asp:RadioButtonList > 
																				 < /td > 
																		 < /tr >

وبذلك نكون قد قمنا بعرض الاسئلة الواحد تلو الاخر متبوعة باجابتها وبدون الدخول الى الكود نهائيا ..

الخطوة التالية هي حفظ اجوبة المشاركين..

ولذلك يجب ان نقوم بالخطوات التالية:

1.نضيف Button خارج الrepeater

2.نضيف ايضا HiddenField نسمية hdnAnswerID.

3.نضيف SqlDataSource جديد يكون على النحو التالي:

 
 < asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = " < % $ ConnectionStrings:QandAdbConnectionString % > "
								SelectCommand = "SELECT [answerStatus] FROM [Answer] WHERE ([answerID] = @answerID)" > 
								 < SelectParameters > 
										 < asp:ControlParameter ControlID = "hdnAnswerID" Name = "answerID" PropertyName = "Value"
												Type = "Decimal" / > 
								 < /SelectParameters >

ومن خلال ال Button نقوم بالكود التالي :

 
protected void Button1_Click(object sender , EventArgs e)
		{
				int correctAnswers = 0;
				int UserID = UserID; \\نقوم بجلب ال UserID بطريقة او باخرى 

				foreach (RepeaterItem Items in rptQandA.Items)
				{
						RadioButtonList rblAnswers = (RadioButtonList)Items.FindControl("rblAnswers");
						hdnAnswerID.Value = rblAnswers.SelectedItem.Value;
						DataView dvwAnswerStatus = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
						String answerStatus = dvwAnswerStatus.Table.Rows[0].ItemArray[0].ToString();

						if (answerStatus)
								correctAnswers + = 1;
				}

												SqlDataSource1.InsertCommand = "INSERT INTO dbo.UserResults(EmployeeID , CurrectAnswers VALUES ( ' " + EmpID + " ' , " + correctAnswers + ")";
								SqlDataSource1.Insert();

		}

وبذلك يكون قد تم حفظ عدد الاجابات الصحيحة لكل متسابق

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

هذا مالدي احببت ان اشارككم اياه وللمعلوميه فانها المرة الاولى التي اكتب فيها عن كود معين

قد قلت ماقلت ان كان صوابا فمن الله وحده وان كان خطا فمن نفسي والشيطان

ختاما ارجو ان لا تبخلوا علي بارائكم باسلوب الكتابة والكود

تحياتي

منصور الحمود

Success is the ability to go from one failure to the next without any loss of Enthusiasm

#2

اشكرك اخى على مجهودك والى الامام

#3

موضوع جميل

سأطبق الكود لأرى الأداء ولكنني أردت أن أضيف ناحية تجميلية للكود كالتالي:

<asp:Repeater ID="rpt" runat="server">
			<ItemTemplate>
				صف ذو خلفية بيضاء
			</ItemTemplate>
			<AlternatingItemTemplate>
				صف ذو خلفية زهرية
			</AlternatingItemTemplate>
		</asp:Repeater>

حيث نلاحظ من خلال المثال أننا قمنا بتطبيق سمة (صف أبيض صف زهري,صف أبيض صف زهري ...)

ودائما تذكر: المظهر العام هو أول ما يعجب المستخدم (حتى أنا عندما أفتح موقعا لا يحتوي تصميما جيدا لا أشعر بارتياح)

#4

اخي bintt شكرا لمرورك واتمنى لك التوفيق

.

.

اخي Arwany كلامك صحيح فيما يخص المظهر العام ولكن ولله الحمد انني اعمل مع مصمم مختص والا لكنت في ورطه :P

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

تحياتي

Success is the ability to go from one failure to the next without any loss of Enthusiasm

#5

سلام..

in2sol

فكرتك رائعة ..

أهلا بك في منتدى الـ ASP.NET

، تحياتي لك.

#6

الشكر لك يا جوليا ...

Success is the ability to go from one failure to the next without any loss of Enthusiasm

#7

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

شكرا in2sol

#8

عزيزي شهاب

شكرا على مرورك .. بالنسبة للاستبيانات فانا اعمل على برنامج يقوم بذلك فعلا ويحتاج لبعض التعديلات ليكون جاهز تماما وساقوم بوضعه إن شاء الله في المنتدى هنا إن شاء الله

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

Success is the ability to go from one failure to the next without any loss of Enthusiasm

#9

in2sol شكرا عزيزي على الدعوة...لازلت مبتدئ في عالم ال asp.net و احتاج إلى تطوير نفسي للتعامل مع الكلاسات و إلى بعض الوقت حتى استطيع مسايرتكم قليلا في هذه المشاريع.

في انتظار ابداعاتك

تم تعديل هذه المشاركة بواسطة Shehab85 في 31 يوليو 2007 في 18:48

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

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