تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] رسالة خطأ في الداتا جريد فيو
#1
Exclamation 
مساء الخير شباب

تظهر عندي رسالة الخطأ التالية :



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


فما هو حل هذه المشكلة لو سمحتم ؟
الرد }}}
تم الشكر بواسطة:
#2
هذا الاستثناء من الطريقة التي تضبط بها قيم الخلية :

عند الضغط على رأس العامود تحدث عملية (فرز - تصاعدي أو تنازلي)
الـ DataGridView يحاول إستخدام الطريقة ( IComparer ) ضد خلايا تحتوي على أنواع مختلفة، ولأن العامود يحتوي على أنواع مختلفة، لا تستطيع الطريقة  ( IComparer ) إجراء فرز، فيحدث هذا الاستثناء
الطريقة ( IComparer  ) تأخد أول خلية من العامود وتحدد نوعها ( أول خلية مثلاً نوعها نصي String ) ولكن الخلية التالية في نفس العامود تحتوي على قيمة من نوع ( Integer ).
هنا تحدث المشكلة لأنه لا يمكن مقارنة نوع بنوع مختلف،
يجب أن تكون كل الخلايا في نفس العامود من نفس النوع



والرسالة التي تظهر لك الخطاء :
تقول ( يجب أن يكون الكائن من نوع String )

معنى الرسالة مغلوط، وهو ليس القصد بأن الكائن يجب أن يكون من نوع String، المعنى هو أن الكائن الذي سبب الخطاء هو من نوع String.

ومن النظرة الأولى على الـ DataGridView يتضح ان الخطاء بسبب ( عامود كلمة المرور ) 
لأن أول خلية عبارة عن رقم
والخلية التي تحتها عبارة عن نص
ولأن الخلية الأولى (رقم) والثانية (نص) هنا رسالة الخطاء تقول ( يجب أن يكون الكائن من نوع String )

لا توجد أي مشكلة في الفرز مع القيم الخالية ، عندما تكون القيمة Nothing أو NULL
 


الحل هو :
عند تعيين القيم للخلية ( يجب تحديد نوعها بشكل صريح )
لأن كل الخلايا في الـ DataGridView من نوع Object
لذلك يجب أن تكون القيمة صريحة 

إذا كان العامود عبارة عن أرقام من نوع Integer
إستخدم المحول CInt("547") لتحويل قيمة من نوع String إلى قيمة من نوع Integer بشكل صريح
لاحض القيمة بين القوسين نصية بسبب علامة التنصيص (") ، نريد تحويلها إلى Integer صريح

إذا كان العامود عبارة عن قيم نصية
إستخدم المحول CStr(547) لتحويل قيمة من نوع Integer إلى قيمة من نوع String بشكل صريح
لاحض القيمة بين القوسين Integer صريح بدون علامة التنصيص (") نريد تحويلها إلى نص صريح

وهكذا دواليك مع الأنواع الأخرى....

أرجوا أن تكون وصلت الفكرة
الرد }}}
تم الشكر بواسطة:  , Taha Okla , أبو خالد الشكري , ahmed_king2023
#3
م
ساء الخير أستاذ عبد الله الدوسري
شكرا جزيلا على شرحك لمشكلة وحلها
بصراحة ما قصرت
وأنا مبدئيا فهمت قصدك .
وحقيقة جميع الأعمدة من نوع Text ، إلا فقط عمود واحد نوعه Link وهو عمود رابط الموقع
وهذا يتضح من خلال الصورة التالية :


والآن ما هي الجملة البرمجية التي أضيفها لكي أحل المشكلة ؟

ولك خالص شكري ومحبتي .
الرد }}}
#4
السلام عليكم ورحمة الله وبركاته

هل وضعت أكواد تحت الداتا جريدفيو : تتفعل بمجرد النقر على الداتا جريد ؟؟

اذا كان كذلك يجب بأن تضع أكواد لتجنب الوقوع بالخطأ مثلا :
تضع في البداية : 
- اذا كان عدد الاسطر أقل من واحد أنهي الاجراء (Exit Sub)
- اذا كان الرقم المرجعي للسطر الحالي (Index يعني) أقل من صفر (Exit Sub)

يفضل أن تجعل حقل الروابط من نوع نصي
وتجعل تشغيل الراوبط عن طريق الكود 
في حدث النقر المزدوج أو المفرد على الداتا جريد 
وتضع له الكودج التالي (طبعاً بعد التعديل لما يناسب برنامجك).:
كود :
If DataGridView1.Rows.Count < 1 Then Exit Sub
If DataGridView1.CurrentRow.Index < 0 Then Exit Sub

Process.Start(DataGridView1(3, DataGridView1.CurrentRow.Index).Value.ToString())
هذا الكود على اساس أن العمود الرابع فيه الرابط ..
هذا الكود تضعه تحت حدث الـ (Click) أو  الأفضل تحت الـ (DoubleClick)..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
#5
(15-04-23, 05:35 PM)أبو خالد الشكري كتب : م
ساء الخير أستاذ عبد الله الدوسري
شكرا جزيلا على شرحك لمشكلة وحلها
بصراحة ما قصرت
وأنا مبدئيا فهمت قصدك .
وحقيقة جميع الأعمدة من نوع Text ، إلا فقط عمود واحد نوعه Link وهو عمود رابط الموقع
وهذا يتضح من خلال الصورة التالية :


والآن ما هي الجملة البرمجية التي أضيفها لكي أحل المشكلة ؟

ولك خالص شكري ومحبتي .



أخي أبو خالد

يوجد فرق بين 
ColumnType
وبين
ValueType

نوع العامود ليس له علاقة بنوع البيانات الموجودة فيه

نوع العامود كما أشرت أخي ( هو نوع الكنترول الظاهر في الـ DataGridView 
مثلاً 
DataGridViewTextBoxColumn
DataGridViewCheckBoxColumn
DataGridViewImageColumn
DataGridViewButtonColumn
DataGridViewComboBoxColumn
DataGridViewLinkColumn

هذة أنواع الأعمدة وليس أنواع البيانات


والدليل أن كل أنواع الأعمدة هذة تحتوي على خاصية أسمها : ValueType
مثلاً : عامود من نوع ( DataGridViewTextBoxColumn )
يمكنك تعيين نوع البيانات فيه بهذا الشكل :
DataGridViewTextBoxColumn.ValueType = GetType(String)
بشكل صريح أن تعلن أن هذا العامود من نوع String

مثلاً :
DataGridViewTextBoxColumn.ValueType = GetType(Integer)
بشكل صريح أن تعلن أن هذا العامود من نوع Integer

مع ان العامودين من نفس النوع إلى أن البيانات تختلف



مثلاً : الأعمدة التالية تستطيع عرض بيانات نصية ولكن شكل الكنترول يختلف أما صندوق نص أو زر أو قائمة منسدلة أو على شكل رابط تفاعلي
DataGridViewTextBoxColumn
DataGridViewButtonColumn
DataGridViewComboBoxColumn
DataGridViewLinkColumn

كلها تحتوي على نوع بيانات نصية


المشكلة عند تعيين البيانات لهذة الأعمدة
الرد }}}
تم الشكر بواسطة: أبو خالد الشكري
#6
خالص الشكر الجزيل للأستاذين
الأستاذ عبد الله الدوسري
والأستاذ /  Taha Okla

ما قصرتم ، جزاكم الله خيرا
وجعله في ميزان حسناتكم

ولكن رغم أني طبقت جميع ما أشرتما إليه ، إلا أن المشكلة ما زالت موجودة للأسف !

يمكنكما تحميل البرنامج من المرفقات ، وحل المشكلة في البرنامج مباشرة
ولكما خالص التحية والاحترام .


الملفات المرفقة
.rar   Favurate Sites.rar (الحجم : 88.08 ك ب / التحميلات : 27)
الرد }}}
تم الشكر بواسطة: ahmed_king2023 , ahmed_king2023
#7
راجع قاعدة البيانات: أفتح الجدول 
وامسح السطر الفارغ منه
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: أبو خالد الشكري , ahmed_king2023
#8
لاحظ الصور أخي أبو خالد

أنت تضع البيانات هكذا : بدون تصريح
   


يجب أن تصرح بنوع البيانات
   






عملت هذا الفيديو لك لترى كيف نستطيع جلب البيانات بطرق أفضل واسهل وأريح وأجمل من وجهت نظري.





الرد }}}
#9
بداية صبحكم الله بالخير والنور والسرور
وتقبل الله صيامكم وجميع أعمالكم الحسنة وأثابكم الجنة

أما بعد ،

فإنه عندما يجتمع عمالقة البرمجة ، نحس نحن الصغار بالتقزم
ولا يسعنى التعليق إلا أن أقول سمعا وطاعة لما توجهونا إليه بأكوادكم البرمجية وأرائكم وخبراتكم الرائعة .





أولا : أشكر عملاق البرمجة الأستاذ Taha Okla 
فعلا كان حلك صحيحا 100% ونجحت التجربة ، بمجرد مسح السطر الأخير (الفارغ) من قاعدة البيانات ، اختفت المشكلة !


ثانيا : أشكر عملاق البرمجة الأستاذ عبد الله الدوسري
ما شاء الله أبدعت في الحل ما قصرت ، وفتحت لي أبواب أخرى في البرمجة لم أكن أستخدمها
الحل الذي تفضلت به فعلا كان ناجحا ورائعا فوق الوصف !
وأشكرك من كل قلبي على شرحك الرائع والتوضيحات المفصلة كتابيا ، أو عن طريق مقطع الفيديو الرائع !

جزاكما الله كل خير ، ونفع الله بكما كل أعضاء المنتدى بخبرتكما الرائعة في البرمجة الذكية
ولكما الشكر الجزيل فيما تقدمانه من حلول ذكية ورائعة لكل الأعضاء .


الرد }}}
تم الشكر بواسطة: عبدالله الدوسري , kebboud , Taha Okla , ahmed_king2023


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  عدم القدرة على إغلاق البرنامج وظهور رسالة the operation could not be completed صالح عبدالله 2 63 12-04-24, 06:03 AM
آخر رد: صالح عبدالله
  مشكلة فى جمع عمود فى داتا جريد فيو احمد خطاب 3 162 06-03-24, 07:49 PM
آخر رد: احمد خطاب
  حذف الاسطر الفارغه من الداتا جريد فيو اليوم السابع 3 2,382 03-03-24, 12:57 AM
آخر رد: مصمم هاوي
  كيفية جمع أرقام عمود فى الداتا جريد فيو بناءاً على بيانات معينة heem1986 5 239 25-02-24, 11:26 PM
آخر رد: heem1986
  كيفية تنفيذ امر عند التعليم على checkbox بالداتا جريد فيو heem1986 2 162 21-02-24, 01:37 AM
آخر رد: heem1986
  [VB.NET] مشكلة التاريخ في الداتا قريد فيو مبرمج صغير 1 6 404 24-01-24, 10:12 PM
آخر رد: annagui
  [VB.NET] ارسال رسالة واتساب h2551996 0 202 07-01-24, 12:17 PM
آخر رد: h2551996
  هل الداتا قراد فيو تسمح بتعدد الاسطر داخل الخلية عند جلب بيانات نصية طويله من قاعدة ب khalidalwdi 3 471 10-11-23, 11:08 AM
آخر رد: khalidalwdi
  ممكن كود ترقيم تلقائي في الداتا غريد فيو المبرمج البسيط 16 10,607 08-11-23, 01:44 AM
آخر رد: الحزين اليماني
  انتقال المؤشر بين الخلايا في نفس الصف في الداتا جريد فيو fares_mohammed 2 471 03-11-23, 09:57 PM
آخر رد: fares_mohammed

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


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