15-04-23, 05:12 PM
هذا الاستثناء من الطريقة التي تضبط بها قيم الخلية :
عند الضغط على رأس العامود تحدث عملية (فرز - تصاعدي أو تنازلي)
الـ 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 صريح بدون علامة التنصيص (") نريد تحويلها إلى نص صريح
وهكذا دواليك مع الأنواع الأخرى....
أرجوا أن تكون وصلت الفكرة
عند الضغط على رأس العامود تحدث عملية (فرز - تصاعدي أو تنازلي)
الـ 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 صريح بدون علامة التنصيص (") نريد تحويلها إلى نص صريح
وهكذا دواليك مع الأنواع الأخرى....
أرجوا أن تكون وصلت الفكرة
