منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : خطأ لم يتم تعيين مرجع كائن لمثيل كائن.
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كود :
 For i As Integer = 0 To DataGridView1.Rows.Count - 1
               If DataGridView1.Rows(i).Cells(17).Value.ToString = Nothing Then
                   DataGridView1.Rows(i).Cells("Column18").Value = Now.ToString("dd/MM/yyyy")
               End If

           Next
           'DateTimePicker4.Value = DataGridView1.CurrentRow.Cells(17).Value.ToString

عند الضغط على العرض من الداتا قريد  تظهر رسالة (لم يتم تعيين مرجع كائن لمثيل كائن. )

رغم أن الخلية غير فارغة  والرقم في الداتا قريد صحيح وما يقابله في قاعدة البيانات هو نفس الرقم العمود والرقم صحيح
رسالة الخطأ "لم يتم تعيين مرجع كائن لمثيل كائن" تعني أن هناك كائنًا معينًا لم يتم تهيئته (تعيينه) بشكل صحيح قبل استخدامه. في الكود الذي قدمته، يمكن أن يكون السبب في هذا الخطأ هو محاولة الوصول إلى قيمة خلية تحتوي على قيمة null أو محاولة تحويل قيمة غير صالحة إلى سلسلة نصية (ToString).

إليك الكود المعدل مع إضافة تحقق من القيمة قبل محاولة الوصول إليها وتحويلها:

PHP كود :
For As Integer 0 To DataGridView1.Rows.Count 1
    
' تحقق من أن الخلية ليست فارغة وأن لديها قيمة صالحة قبل التحويل إلى سلسلة
    If DataGridView1.Rows(i).Cells(17).Value Is Nothing OrElse String.IsNullOrEmpty(DataGridView1.Rows(i).Cells(17).Value.ToString()) Then
        DataGridView1.Rows(i).Cells("Column18").Value = Now.ToString("dd/MM/yyyy")
    End If
Next 

أضفنا الشرط Is Nothing OrElse String.IsNullOrEmpty للتحقق من أن القيمة ليست Nothing  قبل محاولة الوصول إليها.

نقاط مهمة:
التحقق من القيم: تأكد من أن الخلية ليست Nothing قبل محاولة الوصول إليها أو تحويلها.
الأسماء الصحيحة للأعمدة: تأكد من أن الاسم "Column18" هو الاسم الصحيح للعمود الذي تريد تحديثه.
إذا استمرت المشكلة، يمكنك إضافة نقطة فحص (breakpoint) للتأكد من قيمة كل خلية عند المرور في الحلقة:

PHP كود :
For As Integer 0 To DataGridView1.Rows.Count 1
    Dim cellValue 
DataGridView1.Rows(i).Cells(17).Value
    If cellValue Is Nothing OrElse String
.IsNullOrEmpty(cellValue.ToString()) Then
        DataGridView1
.Rows(i).Cells("Column18").Value Now.ToString("dd/MM/yyyy")
 
   End If
Next 

بهذا الشكل يمكنك التحقق من قيمة cellValue في كل خطوة من الحلقة لمعرفة ما إذا كانت القيمة Nothing أو فارغة.

إذا كانت المشكلة لا تزال موجودة:
تأكد من أن العمود 17 (أو Cells(17)) يحتوي على البيانات التي تتوقعها وليس فقط في التصميم بل أيضًا عند تشغيل البرنامج.
تأكد من أن البيانات في قاعدة البيانات قد تم جلبها بنجاح إلى DataGridView. قد يكون هناك خطأ في عملية الجلب نفسها.
الحل ممتاز ولم تظهر معي الرسالة رغم وجود خانات فارغة في قاعدة البيانات
ولكن عندي سؤال
عند استخدام التايم بيكر لابد أن تكون الخانة غير فارغة أو يعود البرنامج بخطأ رغم أن الخانات ممكن أن تكون فارغة وممكن لا ليس إلزاميا
وعند الإضافة رغم عدم وجود تاريخ من المفروض أن تكون الخانة فارغة تاخذ تاريخ يوم الادخال وهذا خطأ من المفترض يكون فارغا كيف حل هذه المشكلة

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