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

فحص قيمة مدخلة من خلال datagrid

مغلق
بدأه الدبلوماسي1 في 5 نوفمبر 2006 · 6 رد · 1,311 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني الكرام

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

وكيف إذا كانت القيمة المدخلة سيتم إدخالها من خلال datagrid

أرجوا التفصيل في هذا الموضوع ولكم جزيل الشكر

#2

السلام عليكم

أولاً أنصحكم بالتحول إلى 2005 لمافيه ميزات أفضل من DataGrid فالقديم عقيم الان...

لفحص القيمة نستخدم الحدث ColumnChanging

في حدث التحميل نكتب التالي formLoad event

'Validate Suspicion Kind to ValidateDataGrid Delegate 
			AddHandler DsMain1.Tables("SusAccused").ColumnChanging, _
			AddressOf ValidateDataGrid

Private Sub ValidateDataGrid(ByVal s As Object, _
	   ByVal e As System.Data.DataColumnChangeEventArgs)

		'نحدد اسم العامود
		If (e.Column.ColumnName.Equals("ColumnName")) Then

			'نأخذ قيمة الصف في متغير
			Dim ValueToCheck As String = CType(e.ProposedValue, String)

			'نتحقق من القيمة هل هي قيمة رقمية أم لا 
			If Not IsNumeric(ValueToCheck) Then
				e.Row.SetColumnError(e.Column, "القيمة المدخلة ليست قيمة رقمية")
			Else

				'نمسح رسالة الخطأ في الصف الحالي
				e.Row.SetColumnError(e.Column, "")

			End If
		End If

	End Sub

ثم تأخذ القيمة الـ StoredProcedure وتتحقق منها أما إذا كنت تجلب كل القيم إلى الـ Dataset فالاختبار سيكون عليها لا على قاعدة البيانات

بالتوفيق إن شاء الله.

في المثال يتضح المقال

#3

السلام عليكم

نعم أخي : الآداة DataGridView أبصرت النور في 2005 ولم تكن تعرف من قبل

وكانت DataGrid هي المحتكرة آنذاك , لكن ليس الان حيث شُيعت جنازتها يوم ولادة أختها DataGridView. ههههه.

و الميزات التي في الجديدة كان حلم يراود معظم المبرمجين لهذه الاداة الجبارة.

أما عن الكود المعروض فهو يعمل على 2005 لكن ليس هو الانسب حيث هنالك بعض الاحداث التي تغني عنه

منها الحدث CellBeginEdit والحدث CellEndEdit على سبيل المثال وفقاً للمثال السابق سيكون في الحدث CellEndEdit إليك ذلك

في هذا الكود في الاسفل نتحقق في الحدث CellEndEdit عن وقوف المستخدم على العامود CustomerID ثم بعد ذلك

نأخذ القيمة التي وضعها المستخدم و نتحقق منها, هل هي قيمة رقمية أم لا, فإن لم تكن رقمية سنرسل رسالة خطأ في نفس الخلية Cell للأفت أنتباه المستخدم لذلك الخطأ

غير ذلك سنمسح الخطأ في الخلية إن وجد , و إليك أكثر من طريق لإسناد قيمة للخاصية ErrorText التي تتولى أظهار رسالة الخطأ.

 Private Sub MyDataDataGridView_CellEndEdit( _
	ByVal sender As Object, _
	ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
	Handles MyDataDataGridView.CellEndEdit
		Try
			'Check that if we are on CustomerID Column.
			If MyDataDataGridView.Columns(e.ColumnIndex).Name = "CustomerID " Then


				Dim ValueToCheck As String = _
			   Me.MyDataDataGridView(e.ColumnIndex, e.RowIndex).FormattedValue.ToString


				If Not IsNumeric(ValueToCheck) Then

					'Set the error message to the current cell.
					Me.MyDataDataGridView.Rows(e.RowIndex _
					).Cells(e.ColumnIndex).ErrorText = _
				   "القيمة المدخلة ليست قيمة رقمية"


				Else

					'Clear the error message if any.
					  Me.MyDataDataGridView(e.ColumnIndex, e.RowIndex).ErrorText = ""

				End If
			End If

  Catch ex As Exception
			MsgBox(ex.Message)
		End Try

	End Sub

هذا والله أعلم.

في المثال يتضح المقال

#4

جزاك الله خيرا أخي الغملاسي على ردك الجميل وتفاعلك مع الموضوع

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

ولكن ماقصدته أن يتم فحص القيمة المدخلة ومطابقتها مع حقل جدول معين وليكن هذا الجدول في dataset

كمثال أقوم بفحص كمية مدخلة والتأكد من أنها أكبر من قيمة حقل معين لجدول موجود في dataset

وضع في عين الإعتبار أني أقوم بالفحص للسجل الحالي

قد أكثر عليك أخي ولكن طلب مني هذا الشئ في مقابلة شخصية وأنا لم يسبق لي القيام بعمل مماثل وليست لدي أدنى فكرة :^) :^)

لذلك أتمنى منك التفصيل

وجزاك الله خيرا على جهودك المتميزة في هذا المنتدى المتميز

#5

السلام عليكم

فقط بعض الاستفسارات , هل قيمة الحقل المراد المقارنت بها متوفرة أم بعد أن يقوم المستخدم بإدخالها ؟

هل الجدول الذي به القيمة هو نفس الجدول المرتبط بـ DataGrid ؟

وهل تقصد بحقل Cell في Row أم تقصد عامود Column بحد ذاته ؟

كذلك ما نوع القيمة المراد فحصها و ما نوع المقارن بها ؟

ما هي آلية الفحص لهذه القيمة.

عذراً العمل إن شأت قدمته لك عبر الـ DataGridView لاني لا أملك 2003 الان

السلام عليكم

تم تعديل هذه المشاركة بواسطة الغملاسي في 8 نوفمبر 2006 في 12:52

في المثال يتضح المقال

#6

السلام وعليكم

أخي القيمة المراد مقارنتها ستؤخذ من خلال إدخال المستخدم

والجدول المراد المقارنة معه فليس هو نفسه الذي على datagrid وإنما جدول آخر سيكون موجودا على dataset

والحقل المقصود هو Cell في Row

والحقل نوعه رقمي (integer) في كليهما

وأما آلية العمل فعندمايقوم المستخدم بإدخال القيمة (كمية الصنف المطلوبة) نقوم بالتأكد من أن هذه القيمة متوفرة من خلال جدول الأصناف أم لا

وإذا كان هناك مشروع لنظام مشتريات ومبيعات وفواتير أتمنى وضع رابط له

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

#7

السلام عليكم

الفكرة كالتالي : قاعدة بيانات فيها جدولين الاول Main وهو الجدول الرئيسي , الجدول الثاني وهو Types وهو جدول الاصناف

كِلا الجدولين يتم تحميلهما في Dataset

طريقة التحقق تكمن في التحقق أولاً من قيمة (كمية الصنف ) هل هي قيمة رقمية أم لا و بما أن نوع البيانات في قاعدة البيانات هي قيمة رقيمة

فالتحقق من نوع القيمة يكون تحصيل حاصل , لكن فقط من باب ضرب المثال لا أكثر.

ثانياً بعد ان يتم إدخال قيمة رقمية نتحقق من قيمة اسم الصنف في نفس الـ DataGridView ثم نختبرهما على جدول الاصناف إذا تطابق

اسم الصنف المدخل مع احد الاسماء المدرجة مسبقاً في جدول الاصناف , سنرجع قيمة كمية الصنف ثم نختبر تطابقها من عدمة مع القيمة المدخلة في الجدول Main

غير ذلك نرسل رسالة خطأ ان اسم الصنف غير مطابق ولا يوجد في جدول الاصناف ..

شاهد المثال التالي: أو الملف المرفق :

الكود الاول هو : الحدث إنهاء تحرير الخلية في الشبكية CellEndEdit event

Private Sub MainDataGridView_CellEndEdit(ByVal sender As Object, _
		   ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
		   Handles MainDataGridView.CellEndEdit


		Try

			'Check that if we are on typeQuantity Column.
			If MainDataGridView.Columns(e.ColumnIndex).Name = "ColumnTypeQuantity" Then

				Dim ValueToCheck As Integer

				Dim CheckNullValue As DataGridViewTextBoxCell = _
				CType(MainDataGridView(e.ColumnIndex, e.RowIndex) _
				, DataGridViewTextBoxCell)

				If CheckNullValue.Value IsNot DBNull.Value Then
					ValueToCheck = CInt(CheckNullValue.Value.ToString)
				Else
					MsgBox("الخلية الحالية لا تقبل قيمة فارغة")
					'do something here to prevent update event.

					Return
				End If



				If Not IsNumeric(ValueToCheck) Then

					'Set the error message to the current cell.
					'If the Datatype of column is already a number
					'Then this type of Condition should be omited..
					'Just an example how to validate cell.
					Me.MainDataGridView.Rows(e.RowIndex _
					).Cells(e.ColumnIndex).ErrorText = _
				   "القيمة المدخلة ليست قيمة رقمية"


				Else

					Dim typeNameCellValue As String = _
					Me.MainDataGridView(1, e.RowIndex).FormattedValue


					'Comparing method.
					Dim QuantityCellValue As Integer = _
					mysearch(ValueToCheck, typeNameCellValue.Trim, CompanyDBDataSet)


					If QuantityCellValue <> -1 Then
						Dim Compartion As Integer = _
						IntegerComparor(QuantityCellValue, ValueToCheck)

						Select Case Compartion

							Case -1
								MsgBox( _
								"خطأ القيمة المدخلة أعلى من قيمة الصنف" & _
								vbCrLf & _
								"  قيمة الصنف هي   " & QuantityCellValue & vbCrLf & _
								 "  القيمة المدخلة هي   " & ValueToCheck, _
								MsgBoxStyle.Critical, _
								 "Error")

							Case 0
								MsgBox( _
								"صحيح كِلتا القيمتين متطابقتين" & _
								 vbCrLf & _
							   "  قيمة الصنف هي   " & QuantityCellValue & vbCrLf & _
								 "  القيمة المدخلة هي   " & ValueToCheck, _
								 MsgBoxStyle.Information, "Correct")

							Case 1
								MsgBox( _
								"صحيح القيمة المدخلة أقل من القيمة الصنف  " & _
								 vbCrLf & _
							  "  قيمة الصنف هي   " & QuantityCellValue & vbCrLf & _
								 "  القيمة المدخلة هي   " & ValueToCheck, _
								 MsgBoxStyle.Information, "Correct")

						End Select

						MainDataGridView(1, e.RowIndex).ErrorText = String.Empty
					Else
						MsgBox("اسم الصنف المدخل غير متوفر في جدول الاصناف")
						Me.MainDataGridView(1, e.RowIndex).ErrorText = _
						"لابد أن يطابق اسم الصنف اي قيمة في جدول الاصناف"

					End If
				End If
			End If



		Catch ex As Exception
			MsgBox(ex.Message)
		End Try


	End Sub

وظيفتي المقارنة و البحث

 '<<<<<<<<<<<<<<<<<<(INTEGER COMPAROR)>>>>>>>>>>>>>>>>>>
	' 0 They are Equal (both numbers are Identical)
	' 1 Int1 is Bigger than Int2 
	'-1 Int2 is Bigger than Int1 
	'<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	Private Function IntegerComparor(ByVal Int1 As Integer, _
		ByVal Int2 As Integer) As Integer
		Try
			Return StrComp(CStr(Int1), CStr(Int2), CompareMethod.Text)
		Catch ex As Exception
			MsgBox("خطأ أثناء المقارنة بين الارقام  ", ex.Message)
		End Try
	End Function


	Protected Function mysearch(ByVal TypeQuantity As Integer, _
	ByVal TypeName As String, _
	ByVal mydataset As DataSet) As Integer

		Dim i As Integer
		Dim CurrentTypeQuantity As Integer = 0
		Dim CurrentTypeName As String = String.Empty


		For i = 0 To mydataset.Tables("Types").Rows.Count - 1

			CurrentTypeQuantity = Integer.Parse( _
			mydataset.Tables("Types").Rows(i)("TypeQuantity").ToString)


			CurrentTypeName = mydataset.Tables("Types").Rows(i)("TypeName").ToString

			'If TypeName is correct but value of quantity is not Identical.
			If TypeName = CurrentTypeName Then

				'Return the CurrentTypeQuantity.
				Return CurrentTypeQuantity

			Else

				'names are not identical.
				mysearch = -1
			End If


		Next
	End Function

ValidateCellDependOnOtherValue.rar

في المثال يتضح المقال

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

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