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

كيف اتحكم في Arraylist بعدم تكرار المعلومات اذا اضيفت مرتين

بدأه خيال وحب في 15 مايو 2009 · 4 رد · 779 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

توضيح للسؤال (برنامج امتحانات) :

لدي كلاس به المتغيرات التالية

Public Class Answer
	Private QID As String
	Private CorrectAnswer1 As String
	Private StudentAnswer As String
	Private Result As String


	Public Property MyQID() As String
		Get
			Return QID
		End Get
		Set(ByVal value As String)
			QID = value
		End Set
	End Property

	Public Property MyCorrectAnswer() As String
		Get
			Return CorrectAnswer1
		End Get
		Set(ByVal value As String)
			CorrectAnswer1 = value
		End Set
	End Property

	Public Property MyStudentAnswer() As String
		Get
			Return StudentAnswer
		End Get
		Set(ByVal value As String)
			StudentAnswer = value
		End Set
	End Property

	Public ReadOnly Property MyResult() As ResVal
		Get
			If StudentAnswer = CorrectAnswer1 Then
				Return ResVal.Correct
			Else
				Return ResVal.Incorrect
			End If
		End Get
	End Property

	Public Enum ResVal
		Correct
		Incorrect
	End Enum
End Class

ولدي الفورم التالي الذي يعرض الاسئلة للطلاب

storm_5622180051934956906_1.jpg

والزر الذي يحفظ عن طريق ال ArrayList التالي

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		' Save the results into the database.

		Try
			' Save off previous answers
			Dim dr As System.Data.DataRowView
			dr = CType(DetailsView1.DataItem, System.Data.DataRowView)

			' Create Answer object to save values

			a.MyQID = dr("QuestionOrder").ToString()
			a.MyCorrectAnswer = dr("TCorrectAnswer").ToString()
			a.MyStudentAnswer = Me.DropDownList1.SelectedValue.ToString()
			al = CType(Session("AnswerList"), ArrayList)
			Dim b As Integer
			b = a.MyQID
			al.Add(a)
			Session.Add("AnswerList", al)

		Catch ex As Exception
			Label1.Text = ("Error2 " + ex.Message)
		End Try
		If DetailsView1.PageIndex = DetailsView1.PageCount - 1 Then
			' Go to evaluate answers
			Response.Redirect("results.aspx")
		Else
			DetailsView1.PageIndex += 1
		End If
		If DetailsView1.PageIndex = DetailsView1.PageCount - 1 Then
			Button1.Text = "Save and Logout"
		End If

اما في زر السابق فترجع للسؤال السابق فقط

 Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

		al = CType(Session("AnswerList"), ArrayList)
		al.Add(a)
		'Session.Remove("AnswerList")

		If DetailsView1.PageIndex = DetailsView1.PageCount - 1 Then
			' Go to evaluate answers
			Response.Redirect("results.aspx")
		Else
			DetailsView1.PageIndex -= 1
		End If
	End Sub

المشكلة لدي اذا تكررت اجابة الطالب (اي رجع لسؤال سابق كلما ضغط زر Next تضاف مصفوفة جديدة) في النتائج وهنا الصورة للتوضيح

storm_1252411521617902574_2.jpg

الاسئلة 1 - 2 حلت مرتين واضيفت مرتين !

كيف اكتب فوق الاجابة السابقة او ابقي أخر اجابة للطالب فقط او احدد انها تضاف كرقم السؤال مثلا ام هنالك طريقة اخرى غير ArrayList ؟؟

شكرا للجميع

تحياتي

:wub:

انا افكر اذا انا مبدع .... I think therfore I am Creative

#2

السلام عليكم:

من الأفضل استخدام HashTable بدلا من ArrayList

رَبِّ أَوْزِعْنِي أَنْ أَشْكُرَ نِعْمَتَكَ الَّتِي أَنْعَمْتَ عَلَيَّ وَعَلَى وَالِدَيَّ وَأَنْ أَعْمَلَ صَالِحًا تَرْضَاهُ وَأَدْخِلْنِي بِرَحْمَتِكَ فِي عِبَادِكَ الصَّالِحِينَ

تلاوات خاشعة مؤثرة

#3

شكرا لك اخي الكريم على الملاحظة القيمة ولكن هل اجد لديك مثال ؟!

واجهتني مشكلة في الكود بعد استخدام ال HashTable

حيث حاولت الحفظ عن طريق رقم السؤال a.MyQID هنا :

' Save off previous answers
			Dim dr As System.Data.DataRowView
			dr = CType(DetailsView1.DataItem, System.Data.DataRowView)

			' Create Answer object to save values

			a.MyQID = dr("QuestionOrder").ToString()
			a.MyCorrectAnswer = dr("TCorrectAnswer").ToString()
			a.MyStudentAnswer = Me.DropDownList1.SelectedValue.ToString()
			HT = CType(Session("Hashtable"), Hashtable)
			Dim b As Integer
			b = a.MyQID
			HT.Add(a.MyQID, a)
			Session.Add("Hashtable", HT)

ورسالة الخطأ هي

Error: Object reference not set to an instance of an object

شكرا للجميع

تحياتي :blush:

تم تعديل هذه المشاركة بواسطة خيال وحب في 17 مايو 2009 في 21:39

انا افكر اذا انا مبدع .... I think therfore I am Creative

#4

لم استطع حل المشكلة هل من حلول اخرى

انا افكر اذا انا مبدع .... I think therfore I am Creative

#5

الحمدلله وجدت الحل وكان نفس الكود الاول باستخدام ال ArrayList

الحل كان باضافة تحقق من الاجابة في الاراي فاذا كانت موجودة تكتب فوقها واذا لا يتم ادخال صف جديد

 Private Sub AddToList(ByRef answerList As ArrayList, ByRef ans As Answer)
		For Each an As Answer In answerList
			If an.MyQID = ans.MyQID Then
				an.MyStudentAnswer = ans.MyStudentAnswer
				Exit Sub
			End If
		Next
		answerList.Add(ans)
	End Sub

شكرا للجميع وتقبلوا تحياتي

:wub:

انا افكر اذا انا مبدع .... I think therfore I am Creative

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

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

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

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

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