تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[ تم الحل ] خطأ عند الضغط على الداتاجريد
#1
السلام عليكم.اخواني لو يمكن المساعدة ربنا يبارك فيكم.بالجدول عندي 2 حقول أكسس من نوع Boolean
المشكلة لما بالخطأ أضغط على آخر صف فارغ بالداتاجريد يطلعلي هذا الخطأ.و لما أحذف الحقول Boolean حتى وان ضغطت بمكان فارغ لا يظهر الخطأ
كود الضغط على الداتاجريد

كود :
   Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
       Try
           With DataGridView1.CurrentRow
               TextBox1.Text = .Cells("Id").Value.ToString()
               TextBox2.Text = .Cells("Name").Value.ToString()
               TextBox3.Text = .Cells("Birth").Value.ToString()
               CheckBox1.Checked = .Cells("FirstPrime").Value.ToString()
               CheckBox2.Checked = .Cells("SecondPrime").Value.ToString()

               If DataGridView1.CurrentRow.Cells(2).Value.ToString = "" Then
                   TextBox3.Text = ""
               Else
                   TextBox3.Text = Format(DataGridView1.CurrentRow.Cells(2).Value, "yyyy/MM/dd")
               End If

           End With
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try
   End Sub
الخطأ يلي يظهر هو
Conversion from String to type 'Boolean' is not valid
بارك الله فيكم
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

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

تعال نقول ان لدينا مشروع يحتوى على 
TextBox1

واننا نريد ان نطبق عليه اكتر من امر
مثل تفريغه بالبداية ثم  اعطاء قيمة جديدة ثم وضع المؤشر عليه

فبطبيعة الحال ابسط ما سيتم كتابته هو
كود :
       TextBox1.Clear()
       TextBox1.Text = "New String.."
       TextBox1.Focus()

طيب لو قلت انا مش محتاج اكتب كلمة
TextBox1

دائماً فى كل سطر ويكفيني اكتب بهذا الشكل مباشراً
كود :
           .Clear()
           .Text = "New String.."
           .Focus()

عشان يتم الامر ده بيتم استخدام With
ووظيفته هو مضمون او ما يتبع الاداء بحيث كل ما بداخل كود With
فهو يتبع الى TextBox1 لذلك تجد دائماً بداية كل تنفيذ هو . مباشراً
بدون كتابة TextBox1 حتى يتم اغلاق With

طيب الكود سيكون شكله ايه بعد استخدام With
سيكون الكود بهذا الشكل
كود :
       With TextBox1
           .Clear()
           .Text = "New String.."
           .Focus()
       End With

طيب لو حبيت اعمل تحقق من قيمة سيكون بهذا الشكل
كود :
       With TextBox1
           If .Text = "Old String." Then
               .Clear()
               .Text = "New String.."
               .Focus()
           End If
       End With

لاحظ كده فى سطر IF انا كتبت مباشراً .Text بدون ان اكتب TextBox1
لان كما قمت بالذكر بالاعلى انا بداخل ما يتبع TextBox1 
فاى ما يكتب من تنفيذ فهو يخص فقط TextBox1

طيب ناتى الى الكود الخاص بك
وهو الخطاء الذى وقعت به وهو بهذا السطر
كود :
           TextBox3.Text = .Cells("Birth").Value.ToString()

ثم ياليه بالاسفل لنفس السطر وهو
كود :
           If DataGridView1.CurrentRow.Cells(2).Value.ToString = "" Then
               TextBox3.Text = ""
           Else
               TextBox3.Text = Format(DataGridView1.CurrentRow.Cells(2).Value, "yyyy/MM/dd")
           End If

انت متخيل انك عملت ايه
 فى البداية انت قمت بتعبئة TextBox3 بقيمة التاريخ
ومن ثم قمت باعادة التحقق بالنهاية
اذا كان التاريخ غير موجود فاجعل TextBox3 فارغ 
واذا كان يحتوى على تاريخ قم بتعبته بالتاريخ

ومن الصح ان يكون الكود من البداية بهذا الشكل
كود :
           If .Cells("Birth").Value.ToString = "" Then
               TextBox3.Text = ""
           Else
               TextBox3.Text = Format(.Cells("Birth").Value, "yyyy/MM/dd")
           End If

لاحظ كده كود التحقق اصبح باى شكل
وحتى الكود بداخل الـ Format

واذا احببنا ان نجعل الامر باسهل وابسط اكثر فيمكنك ان تجعله بهذا الشكل
كود :
           TextBox3.Text = IIf(.Cells("Birth").Value.ToString = "", "", Format(.Cells("Birth").Value, "yyyy/MM/dd"))

لاحظ ان القيمة نفسها هى التى يتم التحقق منها مباشراً
ليتم تعبئة TextBox3 بالقيمة المطلوبة

طيب خلينا ننظر للكود كيف اصبح بعد ما تم ما بالاعلى
كود :
       With DataGridView1.CurrentRow
           TextBox1.Text = .Cells("Id").Value.ToString()
           TextBox2.Text = .Cells("Name").Value.ToString()
           TextBox3.Text = IIf(.Cells("Birth").Value.ToString() = "", "", Format(.Cells("Birth").Value, "yyyy/MM/dd"))
           CheckBox1.Checked = .Cells("FirstPrime").Value.ToString()
           CheckBox2.Checked = .Cells("SecondPrime").Value.ToString()
       End With

طيب ناتى للجزء الخاص بالمشكلة
لظهور تلك الرسالة والسبب 
بان القيمة خاصة FirstPrime و SecondPrime فارغة

الامر يمكن حله من خلال طريقتين
الطريقة الاولى وهو تعضيل الاضافة فى اداء الداتا جريد
بحيث اخر سطر الفارغ لم يظهر معك لانك بكلا الاحوال لا تستخدم الاضافة اليدوية
من خلال الموس و لوحة المفاتيح كما لو ان الداتا جريد ملف Excel

الطريقة الثانية ان تجعل الكود بهذا الشكل
كود :
       With DataGridView1.CurrentRow
           TextBox1.Text = .Cells("Id").Value.ToString()
           TextBox2.Text = .Cells("Name").Value.ToString()
           TextBox3.Text = IIf(.Cells("Birth").Value.ToString() = "", "", Format(.Cells("Birth").Value, "yyyy/MM/dd"))

           If IsNothing(.Cells("FirstPrime").Value) OrElse String.IsNullOrEmpty(.Cells("FirstPrime").Value) Then
               CheckBox1.Checked = .Cells("FirstPrime").Value
           Else
               CheckBox1.Checked = False
           End If

           If IsNothing(.Cells("SecondPrime").Value) OrElse String.IsNullOrEmpty(.Cells("SecondPrime").Value) Then
               CheckBox2.Checked = .Cells("SecondPrime").Value
           Else
               CheckBox2.Checked = False
           End If
       End With

وبكده تكون قمت بحل المشكلة
وكذلك معالجة الخطاء بالكود

اتمنى ان يكون الشرح بسيط
وان تكون على استوعاب الان فى كيفية استخدام With

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: محمد خيري , حريف برمجة , ابو روضة
#3
بارك الله فيك اخي elgokr ربنا يجازيك كل خير يا رب و الله شرح ولا أروع و منطقي و هو يلي لازم يكون و كتبته بالحرف مثل ما هو بالضبط لكن رسالة الخطأ كانت

كود :
Conversion from String to type 'Boolean' is not valid
الان عندما غيرتها تمتما مثل ما تفضلت به اصبحت رسالة الخطا هكذا

كود :
Conversion from DBNull to type 'String' is not valid
رسالة الخطا يظهر فقط  لما اعمل كليك على سطر العناوين بالداتاجريد او اضغط على آخر سطر الفارغ.ربنا يكرمك اخي
الرد }}}
تم الشكر بواسطة:
#4
لى ولك وللجميع بامر الله

بخصوص الرسالة
جرب ان تجعل الكود بهذا الشكل
كود :
       With DataGridView1.CurrentRow
           TextBox1.Text = .Cells("Id").Value.ToString()
           TextBox2.Text = .Cells("Name").Value.ToString()
           TextBox3.Text = IIf(.Cells("Birth").Value.ToString() = "", "", Format(.Cells("Birth").Value, "yyyy/MM/dd"))

           If .Cells("FirstPrime").Value.ToString() = "" Then
               CheckBox1.Checked = False
           Else
               CheckBox1.Checked = .Cells("FirstPrime").Value
           End If

           If .Cells("SecondPrime").Value.ToString() = "" Then
               CheckBox2.Checked = False
           Else
               CheckBox2.Checked = .Cells("SecondPrime").Value
           End If
       End With

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: محمد خيري , حريف برمجة
#5
الان اختفت رسائل الخطأ لما اضغط بمكان فارغ الله يبارك فيك و يعطيك ما تتمنى اخي  elgokr اشكرك جزيل الشكر انقذتني بجد كنت رايح اتخلى عن التشيك بكس تماما بسبب الرسائل.شكرا مع تقييمي
الرد }}}
تم الشكر بواسطة:
#6
الشكر لله والحمد لله
والحمد لله على كل حال

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: حريف برمجة , حريف برمجة


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] حول ظهور النافذة الاولى عند الضغط على Menustrip2 في النافذة الثانية vb.net 2012 mh66 0 244 19-10-23, 09:05 AM
آخر رد: mh66
  البرنامج لدي يعمل على ويندوز 11 والان لا يعمل على ويندوز 10 ماهو الحل moh61 1 279 01-09-23, 04:38 AM
آخر رد: اسامه الهرماوي
  اريد كود لمسح النص من textbox بمجرد الضغط على ال textebox للكتابة رهف العريفي 21 11,880 03-06-23, 04:56 AM
آخر رد: سعود
  ممكن الحل masport tv 0 295 07-04-23, 11:36 AM
آخر رد: masport tv
  حذف هذه العلامة " " من الداتاجريد mohameed2015 3 546 03-04-23, 06:01 AM
آخر رد: سعود
  رسالة Out Of Range مع الداتاجريد ADAM12 1 413 11-02-23, 03:53 AM
آخر رد: Taha Okla
  ارجو ان لا تبخلو علينا با الحل ahmedbezia 3 466 06-12-22, 01:29 PM
آخر رد: ahmedbezia
  نشر أيام الشهر داخل الداتاجريد فيو محمد خيري 9 1,247 06-11-22, 03:38 AM
آخر رد: محمد خيري
  تنفيذ الكود عند الضغط على checkbox الموجود في الداتاقريدفيو جيولوجي مبتدئ 1 1,108 29-09-22, 09:55 AM
آخر رد: mohamedassim
  [سؤال] [تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل سعود 7 1,220 03-09-22, 09:44 AM
آخر رد: Taha Okla

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم