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

عدم توافق كود معين مع حدث في الداتا غريد فيو

مغلق
بدأه صاحبة السمو في 13 يونيو 2007 · 8 رد · 856 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام

انا عندي داتا غريد فيو

تحتوي على اربع اعمده

لنفرض ان الموشر في الخانه رقم 4 وكبس المستخدم بالسهم الايسر

اريده ان يتاكد ادا كانت الخانه التى جنبها فارغه اقصد رقم (3) وكان الزر الذي كبسه هو الزر الايسر فانه

ينتقل اى الخانه رقم 2

دون المرور بالخانه 3

كيف يمكنني عمل ذلك

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

If e.ColumnIndex = 4 And DataGridView1(3, e.RowIndex).Value.ToString = "" And e.KeyCode = Keys.Left Then
حدث الانتقال
		End If

المشكله انني لا استطيع ان استخدم الحدث

KeyUp or keyDown

لان

e.ColumnIndex = 4

و

DataGridView1(3, e.RowIndex).Value.ToString = ""

لانهما لا يتوافقان معه

هل توجد طريقه اخرى لتنفيد المطلوب

1145392391.gif
#2

- لماذا تقول أن هناك عدم توافق؟؟؟؟؟؟؟؟؟؟؟؟؟؟

- ماهي المشاكل ورسائل الخطأ التي واجهتك حتى نستطيع مساعدتك بالشكل الأفضل

- ياريت لو أرفقت مثالا صغيرا موضحا فيه مشكلتك حتى نساعدك بالشكل الأفضل

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

اليك اخي ما طلبته

مثال بسيط يوضح الفكره السابقه

WindowsApplication1.rar

1145392391.gif
#4

لو قرأت رسائل الخطأ لديك لرأيت أن لديك رسالتي خطأ في كودك

'ColumnIndex' is not a member of 'System.Windows.Forms.KeyEventArgs'.

'RowIndex' is not a member of 'System.Windows.Forms.KeyEventArgs'.

وهذا ليس معناه أنه لايوجد توافق بل معناه أن عبارة IF لديك خطأ بكاملها فـ ColumnIndex و RowIndex ليسوا أعضاء في e

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

الكود لديك كان

	Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
		If e.ColumnIndex = 3 And DataGridView1(2, e.RowIndex).Value.ToString = "" And e.KeyCode = Keys.Left Then
			DataGridView1.CurrentCell = Me.DataGridView1(0, DataGridView1.CurrentCell.RowIndex)
		End If
	End Sub

وهو خطأ بشكل كامل

والكود الصحيح هو

	Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown

		If Me.DataGridView1.CurrentCell.ColumnIndex = 3 And _
		Me.DataGridView1.Item(2, Me.DataGridView1.CurrentCell.RowIndex).Value = String.Empty _
			 And e.KeyCode = Keys.Left Then

			Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentCell.RowIndex)

		End If

	End Sub

تم تعديل هذه المشاركة بواسطة msas في 13 يونيو 2007 في 23:37

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

شكرا اخي الكريم

واعتذر لتاخري على الرد

ولكن المشكله عندي هي كالتالي

هو انني عندما اجرب الكود المكتوب في الاعلى على مثال تجريبي فانه يعمل

اما عندما اضيفيه على مشروعي والذي فيه اضيف اعمده عن طريق كتابه الكود

فانه للاسف لا يعمل معي

بينما لو مسحت الكود اللى يضيف اعمده وجعلت اضافه الاعمده عن طريق الويزرد فان الكود يعمل معي بالشكل الصحيح

اليك المرفق

يحتوي على داتا غريد تم اضافه الاعمده فيها بشكل برمجي (هنا الكود لا يعمل)

اما لو مسحت الفنشن اللى يضيف اعمده سوف يعمل الكود بالشكل الصحيح

WindowsApplication1.rar

1145392391.gif
#7

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

ربما المشكلة لها علاقة مع المشاركة التالية :

/index.ph...=125176&hl=

وفقكم الله ...

#8

الف شكر اخي الكريم ابو همام

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

لنعد الى المشكله

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

ولكن حتى لو حدفت هدا العامود فان المشكله تبقي كما هي

بصراحه انا بدات اشك انو هناك فرق كبير بين اضافه عامود عن طريق الويزرد وبين اضافته عن طريق الكود

لانو للاسف الكود المطلوب لا يعمل في حاله اني اضفه عامود برمجيا (عن طريق الكود) بينما لو مسحت الكود الذي يضيف الاعمده

فانه يعمل بشكل صحيح

للتوضيح اكثر انظر الى المرفق التالي

يحتوي على صفحتين

احدهما تمت اضافه الاعمده لها عن طريق الويزرد والاخرى عن طريق الكود

هنا في الصفحه الاولى يتم تنفيد الكود المطلوب بينما في الصفحه التاني لا ينفذ

مع انو الاثنين نفس الشي

WindowsApplication1.rar

1145392391.gif
#9

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

أولاً : لا أدري لماذا تتعبين نفسك بكتابة كل تلك الأسطر من الكود في الوقت الذي يستطيع الـ Wizard أن يريحنا منه ببضعة نقرات بالماوس !

ثانياً : أنصح بالاستفادة من الحدث CellLeave الخاص بالـ DataGridView والذي ينقدح عندما يهم التركيز بمغادرة الخلية .

ثالثاً : بالنسبة للمشكلة في مثالك ....

تكمن هذه المشكلة ( أو توقف الحدث MouseDown عن الاستجابة المطلوبة ) في عملية ربط الـ DataGridView بالجدول , أي في السطر التالي :

DataGridView.DataSource = Rs.Tables("clmainE")

لكن لماذا ..؟

لأنه في هذه الحالة أصبح للخاصية ( Cell.Value ) قيمة محددة تابعة لنوع قيم العمود في الجدول المرتبط , و عندئذ لن تعود ( Nothing ) الموجودة في شرط التحقق تنفع حتى

لو كانت الخلية فارغة ظاهرياً , لأنها في هذه الحالة تصبح من النوع ( DbNull ) , و هنا يجب التحقق من هذا النوع عن طريق الوظيفة ( TypeOf ) .

فالحل هنا والله أعلم : وضع الكود التالي في حدث MouseDown ...

		If Me.DataGridView1.CurrentCell.ColumnIndex = 3 And e.KeyCode = Keys.Right Then

			If (TypeOf (Me.DataGridView1.Item(2, Me.DataGridView1.CurrentCell.RowIndex).Value) Is DBNull) Or _
			   (Me.DataGridView1.Item(2, Me.DataGridView1.CurrentCell.RowIndex).Value Is Nothing) Then

				Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentCell.RowIndex)

			End If

		End If

وفقكم الله , و الله ولي التوفيق ...

هذا الموضوع مغلق.

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

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

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

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

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