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

مشكلة في كود التحقق من رصيد الصنف الحالي

بدأه محمد فؤاد تركي في 25 أغسطس 2012 · 10 رد · 1,273 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الزملاء

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

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

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

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

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

حاولت أن امسح Exit Sub من الكود فوجدت ان الكود يعمل بشكل طبيعي لكن يقوم بتنفيذ عملية الحفظ التي تلي كود فحص الرصيد وهذا غير صحيح لان من المفترض ان عملية الحفظ لا تتم طالما لن يتحقق الشرط

Try
            For Each Row As DataGridViewRow In IssueDGV.Rows
                For Rowindex As Integer = 0 To IssueDGV.Rows.Count - 1 Step 1

                    If (IssueDGV.Rows(Rowindex).Cells("Qtyout").Value) > (IssueDGV.Rows(Rowindex).Cells("Balance").Value) Then
                        'Write a comma if an only if this is NOT the first column.
                        IssueDGV.Rows(Rowindex).DefaultCellStyle.BackColor = Color.Yellow

                        If Row.Cells("Qtyout").Value > Row.Cells("Balance").Value Then
                            MsgBox("الرصيد غير كافي برجاء مراجعة رصيد الصنف", MsgBoxStyle.Critical, "تحذير")
                            Exit Sub
                        End If
                    End If

                Next
            Next


            If TexCusid.Text.Trim.Length = 0 Then
                MsgBox("لايمكن ترك رقم العميل فارغ", MsgBoxStyle.Information, "تنبية")

            ElseIf CBOKindofTrans.Text.Trim.Length = 0 Then
                MsgBox("لايمكن ترك نوع الحركة فارغ", MsgBoxStyle.Information, "تنبية")

            ElseIf CBOPayment.Text.Trim.Length = 0 Then
                MsgBox("لايمكن ترك طريقة الدفع فارغة", MsgBoxStyle.Information, "تنبية")

            Else

                If False Then

                ElseIf MsgBox("هل تريد حفظ السجل الحالي", MsgBoxStyle.Information + MsgBoxStyle.YesNo, "تأكيد الحفظ") = MsgBoxResult.No Then
                    Exit Sub
                Else
                    sqlcon.Open()

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

السلام عليكم ...

  1. لا داعي لحلقتي For , واحدة تكفي كمايلي :
        	Dim isOK As Boolean = True
        	For Rowindex As Integer = 0 To IssueDGV.Rows.Count - 1 Step 1
            	IssueDGV.Rows(Rowindex).DefaultCellStyle.BackColor = Color.White
            	IssueDGV.Rows(Rowindex).ErrorText = String.Empty
    
    
            	If (IssueDGV.Rows(Rowindex).Cells("Qtyout").Value) > (IssueDGV.Rows(Rowindex).Cells("Balance").Value) Then
                	IssueDGV.Rows(Rowindex).DefaultCellStyle.BackColor = Color.Yellow
                	IssueDGV.Rows(Rowindex).ErrorText = "Low Balance"
                	isOK = False
    
    
            	End If
    
        	Next
    
        	If Not isOK Then
            	MsgBox("Balance is less than Quantity in Yello Items.")
            	Exit Sub
        	End If

  2. باالنسبة لأكواد التحقق من تعبئة خانات النص , فإن الطريقة الأفضل هي سحب عنصر ErrorProvider على الفورم و اتباع الطريقة التالية التي تؤدي لإظهار رسالة واحدة إذا كان هناك خانات نص فارغة :
    	Dim finalMsg As String
    
    	Sub ValidTexTBox(ByVal textBox As TextBox, ByVal msg As String)
        	If (String.IsNullOrEmpty(textBox.Text.Trim)) Then
            	finalMsg = finalMsg & "Please Enter Value For " & msg & vbNewLine
            	ErrorProvider1.SetError(textBox, "Please Enter Value For " & msg)
        	Else
            	ErrorProvider1.SetError(textBox, String.Empty)
        	End If
    
    	End Sub

    و طريقة الاستدعاء كمايلي :

     finalMsg = String.Empty
    
        	ValidTexTBox(TxtCode, "Code")
        	ValidTexTBox(TxtName, "Name")
    
        	If finalMsg <> String.Empty Then
            	MsgBox(finalMsg)
            	Exit Sub
        	End If

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

الله يبارك لك يا أخي الفاضل حسام

فعلا Error provider أفضل بكثر من كل هذه الــ Validation لكن لاحظت اذا حاولت حفظ البيانات بدون وضع كمية يظهر هذا الخطأ

post-46243-062685000 1345919856_thumb.jp

مع العلم ان بنيه الحقل في حدث Form load

هو

dt.Columns.Add(New DataColumn("QtyOut", GetType(Double)))

وكود الحفظ

insercommand.Parameters.Add("@QtyOut", SqlDbType.Float, 6, "QtyOut")

حاولت أن استخدم هذا الكود لتلافي الحطا لكن لم يفي بالغرض

For i As Integer = 0 To IssueDGV.RowCount = -1
                    If IsDBNull(IssueDGV.Rows(i).Cells("Qtyout").Value) Then
                        MsgBox("لا يمكن الحفظ بدون كمية", MsgBoxStyle.Critical, "تحذير")
                        Exit Sub
                    End If

                Next
المرفقات
1.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 25 أغسطس 2012 في 22:40

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#4

السلام عليكم ...

أهلا بك اخي محمد .. بارك الله بك ..

  1. أنا جربت الكود و هو يعمل بشكل صحيح ..
  2. لكن أنت تفحص الحقل Qtyout و في الكود السابق تقارن بالحقل balance .. اعتقد المشكلة هنا ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

تم تعديل الكود أعلاه

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

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 25 أغسطس 2012 في 22:42

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#6

أخي الفاضل حسام

ارفقت لك مثال يوضح المشكلة

حاول أن تقوم بالضغط علي وزر حفظ بدون وضع قيم في حقل unit price ولاحظ النتيجة

post-46243-044278700 1345925137_thumb.jp

حفظ البيانات داخل داتا جريد فيو.rar

المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

السلام عليكم ...

  1. أنا استخدمت الكود :
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        	For i As Integer = 0 To DataGridView1.RowCount = -1
            	If IsDBNull(DataGridView1.Rows(i).Cells("UnitPrice").Value) Then
                	MsgBox("لا يمكن الحفظ بدون السعر", MsgBoxStyle.Critical, "تحذير")
                	Exit Sub
            	End If
    
        	Next
    	End Sub

    و هو فعلا أظهر رسالة التحذير (لا يمكن الحفظ دون السعر) و لم يعطي أي رسالة خطأ ...

  2. إن الطريقة التي تعمل بها , تعتبر قديمة و هي بحاجة لوقت كبير ... يمكنك الاستعانة بالــ DataSet فهي تقوم بتوليد عمليات الــ CRUD أي (Create , Update , Delete , Retrieve) بشكل تلقائي ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#8

فعلا الكود يعمل بشكل سليم ولا أدري لماذا لم يعمل معي ربما اختلط عليا الامر :) علي أي حال لاحظ معي الكود يقوم بفحص أول سطر فقط داخل DataGridview !!! لذلك حاول ادخال عدة أسطر وقم بوضع لون للاسطر التي قيمتها null ستجد النتيجة ان الكود يقوم بفحص السطر الاول فقط ولا يقوم بفحص باقي الاسطر التي تنطبق عليها نفس الشرط

وعلي أي حال أنا شاكر جدا لمساعدتك يا أخ حسام وسأحاول التغلب علي هذه المشكلة

وشكراً

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

السلام عليكم ...

أهلا بك أخي محمد ...

  1. الكود الذي وضعته أنا في مشاركتي السابقة , كان فيه خطأ في السطر :
        	For i As Integer = 0 To DataGridView1.RowCount = -1

    و المفروض أن يكون

        	For i As Integer = 0 To DataGridView1.RowCount  -1

    (لاحظ إشارة الــ = الثانية)

  2. من الافضل أن نعمل حلقة واحدة , تفحص هل السطر فيه البيانات مدخلة بشكل كامل , فإذا كانت مدخلة بعدها نقوم بفحص الكميات :
    	Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        	Dim isDataFill = True
        	Dim isDataOK = True
        	For i As Integer = 0 To IssueDGV.RowCount - 1
            	IssueDGV.Rows(i).DefaultCellStyle.BackColor = Color.White
            	IssueDGV.Rows(i).ErrorText = String.Empty
    
    
            	If IsDBNull(IssueDGV.Rows(i).Cells("QtyIn").Value) Or IsDBNull(IssueDGV.Rows(i).Cells("QtyOut").Value) Then
    
                	isDataFill = False
                	IssueDGV.Rows(i).DefaultCellStyle.BackColor = Color.Yellow
    
                	IssueDGV.Rows(i).ErrorText = "Please Fill Data"
    
            	ElseIf (IssueDGV.Rows(i).Cells("Qtyout").Value) > (IssueDGV.Rows(i).Cells("QtyIn").Value) Then
                	isDataOK = False
                	IssueDGV.Rows(i).DefaultCellStyle.BackColor = Color.Violet
                	IssueDGV.Rows(i).ErrorText = "Low Balance"
    
            	End If
    
        	Next
        	Dim myMsg As String = String.Empty
        	If Not isDataFill Then myMsg = myMsg & "Please Fill Data Yellow Items" & vbNewLine
        	If Not isDataOK Then myMsg = myMsg & "QtyOut is Bigger Than QtyIn In Violet Items "
    
        	If myMsg <> String.Empty Then
            	MsgBox(myMsg)
            	Exit Sub
        	End If
    
    	End Sub

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#10

بارك الله فيك أخي الغالي حسام

وجعل الله كل حرف كتبتة في هذه المشاركة في ميزان حسناتك ان شاء الله

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

شكرا جزيلا لك

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#11

السلام عليكم ...

بارك الله بك أخي محمد .. و جزاك الله خيرا ...

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

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

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

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

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

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