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

[تنبيه - عنوان غير مناسب : ]كود الانتقال من السطر الاول الى الثاني في datagrid

مغلق
بدأه nour_mohamed في 19 يوليو 2007 · 14 رد · 2,374 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

انني اعمل امر يفوم بادخال بيانات الى قاعدة البيانات مع for loop

والfor loop مرتبط بعدد الاسطر في الداتا جريد المشكله انه عند ادخال البيانات الى قاعدة البيانات يقوم باخد محتويات السطر الاول وادخالها بعدد مرات الاسطر في الداتا جريد وانا اريد ان يدخل في كل مره محتويات السطر الدي يلي السطر السابق والمشكله انني لا اعلم كيف احدد له اسم row علما انني استخدم vb.net2003

اتنمى ان اجد المساعده كما اعتدنا عليها في هذا المنتدى الجميل

وشكرا جعله الله في ميزان حسناتكم

#2

هنالك أكثر من حل لذلك يمكنك حفظ أخر مفتاح اساسي Primery Key في متغير تم ادخاله في قاعدة البيانات و تختبر قيم الارقام الحالية في

الـ DataGrid فما هو أكبر منه يتم ادراجه غير ذلك لا . أو كذلك يمكنك جلب اخر مفتاح اساسي عبر الامر Identity@@

هذا حل تصوري بدون اي تجربة لذلك.

لانه الاصل في تحديث البيانات يجب أن يكون عبر دفعه واحدة سواءً من العنصر Transaction أو DataAdapter أو فردي عبر

الـ DataCommand و بالله التوفيق.

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 19 يوليو 2007 في 14:15

في المثال يتضح المقال

#3

حل آخر

dim n as integer=dg.rows.count -1
for i as integer = 0 to n
dg.rows(i).cells("اسم الحقل").value= قمية ما
.
.
.
next
#4

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

  Dim i As Integer
		For i = 1 To count
			If n < ROOM_ID Then

				'to insert hotel_id +1   
				Dim cmd11 As New SqlCommand("SELECT MAX (Hotel_id)  FROM  RES_HOTEL", conn)
				Dim r5 As SqlDataReader
				r5 = cmd11.ExecuteReader
				r5.Read()
				HOTEL_ID = r5(0) + 1
				r5.Close()
				Dim cmd6 As New SqlCommand
				cmd6.Connection = conn
				cmd6.CommandText = "hot_res"
				cmd6.CommandType = CommandType.StoredProcedure
				cmd6.Parameters.Add("@res_hotel_id", Me.dg1.SelectedItem.Cells(1).Text)
				cmd6.Parameters.Add("@res_id", RES_ID)
				cmd6.Parameters.Add("@hot_id", HOTEL_ID)
				cmd6.Parameters.Add("@res_hotel_rt", ROOM_ID)
				cmd6.Parameters.Add("@res_hotel_date", DAY)
				cmd6.ExecuteNonQuery()

			End If


		Next i
#5

شكرا اخي haroon ولكن انا استخدم vb.net 2003 واجد اخطاء في الكود هل يمكن تغيير الكود هذا الى vb.net 2003?

#6

طبعاً هناك اختلاف بين 2003 و 2005 وخاصة بالنسبة إلى الداتا جريد لكن للأسف أنا مش منزل 2003 حالياً ولكن حسب ذاكرتي - إذا لم تخني الذاكرة - لا يوجد في 2003 وظائف لتحديد سجلات الجريد إلا عن طريق قاعدة البيانات

لكن أخي الكريم بعد إطلاعي على الكود الذي رفعته في مشاركتك أرى أنك تستخدم ستورد بروسيجر لتنفيذ العملية وأنا أرى أن المشكلة هي في الستورد بروسيجر فأنت لم تضع أي كود للانتقال من سجل إلى آخر وأعتقد مما فهمت من كودك أنك أوكلت هذه المهمة إلى البروسيجر إذا كان فهمي صحيح فراجع البروسيجر الذي تستخدمه أما إذا كان فهمي خاطئاً فأعتقد أن المشكلة أنك لم تضع أي وظيفة لتحديد السجل الهدف وفي هذه الحالة أعتقد أه عليك مراجعة حل الأخ الشهاب الحارق

أرجو أن أكون قد ساعدتك ولو قليلاً وشكراً

#7

شكرا اخي haroon

اولا انا لست اخ انا اخت :)

ثانيا نعم انت ساعدتني كثير وليس قليل وشكره جدا لك

ولكن انت اشرت الى وظيفة الانتقال من سطر الى اخر فانا لم اوكل هذه المهم لبروسيجر ولا اعرف كيف استطيع تعريفها في البرنامج وهذه هي المشكلة التي اعاني منها فلو تكرمت اخي ان تخبرني بكيفية استخدامها او صنعها

وانا شكره لك جداً

#8

اني ما احتاجه اخواني هو كود الذي يقوم بادخال البيانات من datagrid الى database حيث انه يقوم بعد الانتهاء من ادخال row الاول ينتقل لادخال ال row الذي يليه فانا استخدمت هذا الكود ولكنه يقوم بادخال ال row الاول في كل مره وهو :

  Dim i As Integer

		For i = 0 To dg2.Items.Count - 1'هذا الكود الذي يقوم بالانتقال الى السطر التالي في datagrid


			Dim cmd11 As New SqlCommand("SELECT MAX (Hotel_id)  FROM  RES_HOTEL", conn)
			Dim r5 As SqlDataReader
			r5 = cmd11.ExecuteReader
			r5.Read()
			HOTEL_ID = r5(0) + 1
			r5.Close()

			Dim cmd6 As New SqlCommand
			cmd6.Connection = conn
			cmd6.CommandText = "hot_res"
			cmd6.CommandType = CommandType.StoredProcedure
			cmd6.Parameters.Add("@res_hotel_id", Me.dg1.SelectedItem.Cells(1).Text)
			cmd6.Parameters.Add("@res_id", RES_ID)
			cmd6.Parameters.Add("@hot_id", HOTEL_ID)
			cmd6.Parameters.Add("@res_hotel_rt", ROOM_ID)
			cmd6.Parameters.Add("@res_hotel_date", DAY)
			cmd6.ExecuteNonQuery()

		Next i
		Response.Write("<script>alert('Done');</script>")

تم تعديل هذه المشاركة بواسطة nour_mohamed في 21 يوليو 2007 في 09:19

#9

اخواني احتاج الى كود يقوم بادخال البيانات من datagrid الى database حيث انه يقوم بعد الانتهاء من ادخال row الاول ينتقل لادخال ال row الذي يليه فانا استخدمت هذا الكود ولكنه يقوم بادخال ال row الاول في كل مره وهو :

For i = 0 To dg2.Items.Count - 1

dg2.Items(i).Cells(0).Text() = dg2.Items.Count - 1 '.rows(i).cells("اسم الحقل").value= قمية ما

Dim cmd11 As New SqlCommand("SELECT MAX (Hotel_id) FROM RES_HOTEL", conn)

Dim r5 As SqlDataReader

r5 = cmd11.ExecuteReader

r5.Read()

HOTEL_ID = r5(0) + 1

r5.Close()



Dim cmd6 As New SqlCommand

cmd6.Connection = conn

cmd6.CommandText = "hot_res"

cmd6.CommandType = CommandType.StoredProcedure

cmd6.Parameters.Add("@res_hotel_id", Me.dg1.SelectedItem.Cells(1).Text)

cmd6.Parameters.Add("@res_id", RES_ID)

cmd6.Parameters.Add("@hot_id", HOTEL_ID)

cmd6.Parameters.Add("@res_hotel_rt", ROOM_ID)

cmd6.Parameters.Add("@res_hotel_date", DAY)

cmd6.ExecuteNonQuery()

' End If

'Next

'End If

Next

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 21 يوليو 2007 في 23:53

#10

السلام عليكم

لا حاجةً لإدخال البيانات من DataGrid الى DataSet بشرط أن تكون مرتبطة بها, ما يدخل من بيانات في الـ DataGrid

هو متضمن في الجدول تماماً. لذلك هذه الفكرة عملية تكرار للبيانات لا أكثر.

السبب : أن الـ DataGrid لابد أن ترتبط بجدولٍ ما (في معظم المشاريع) كأفضل طريقة أما عبر طرق أخرى (فليست بالحسنة) ومشاكلها متوقعه.

ارتباط الـ DataGrid بالـ dataSet هو كالتالي:

ProductsDataGridView.DataSource = Me.ProductsBindingSource

بالنسبة للـ 2005

و

 dataGrid1.DataSource = _dataSet.Tables("customers")

على 2003 أو 2005

سواءً في وقت التشغيل كما في الاعلى أو عبر واجهة التصميم Design Time

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

في المثال يتضح المقال

#11

العنوان غير مناسب

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

في المثال يتضح المقال

#12

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

أولاً : كما قال الأستاذ الكريم ( الشهاب الحارق ) , هذا الأسلوب في إدخال بيانات من DataGridView غير مرتبطة فيه الكثير من المشاكل و التي منها : عدم التأكد من نوعية البيانات المدخلة , أو الاحتمال الكبير في دخول بيانات متكررة ( هذه هامة جداً ) و غيرها من المشاكل غير المتوقعة . فهذا الأسلوب لا ينصح به .

( نعتذر إذا كان هناك أي درجة من التحبيط , ولكن النصيحة واجبة )

ثانياً : طيب , لو تماشينا مع هذه الطريقة , ما هي المشكلة الحالية في الكود السابق لكي يعمل على السطر الأول فقط ...؟ أقول :

صحيح أننا قمنا بوضع العداد ( i ) ليسير بعدد سطور الـ DataGridView , لكننا في الحقيقة لم نستفد منه للانتقال من سطر إلى أخر في كل عدة من عداته ....

كيف ذلك ؟

يجب في كل عدة أن نستفيد من قيمة العداد ( i ) بحيث نجعل قيم الـ Parameters التي ستدخل في قاعدة البيانات تأخذ قيمتها من الـ DataGridView من السطر الذي رقمه مساوي لرقم العداد ... يعني فرضاً

@hotel_id لو أنه يأخذ قيمته من الخلية الثانية من الـ DataGridView , إذاً يجب أن يسحب هذه القيمة من العبارة التالية :

Me.dg1.Rows(i).Cells(1).Value

بحيث تتغير هذه القيمة مع كل عدة للعداد ( i ) و ذلك بحسب الجزء Rows(i) ( وهو الجزء الذي ينتقل على كل السطور )

وهكذا لكل الـ Parameters ولكن مع تغيير الجزء Cells(1) , بحيث نضع رقم الخلية المطلوبة .

هذا ما أتوقعه مبدأياً , والله أعلم . وفقكم الله .......

تم تعديل هذه المشاركة بواسطة أبو همام في 22 يوليو 2007 في 06:12

#13

شكرا اخي الشهاب الحارق بالفعل انا لم استخدم DATASET ولكن هيه نفس المشكله في الانتقال من سطر الى الاخر ياخذ السطر الاول ويقوم بتكراره بعدد الاسطر :wacko: .

وان شاء الله في المرات القادمه سوف انتقي العنوين الصحيحه للموضوع واسفه على الغلط في العنوان .

شكرا لك اخي ابو همام ولكن انا استخدم VB.NET 2003 وليس 2005 وانا شاكره جدا لشرحك الوافي

-waf

#14
اقتباس
شكرا اخي haroon

اولا انا لست اخ انا اخت

ثانيا نعم انت ساعدتني كثير وليس قليل وشكره جدا لك

ولكن انت اشرت الى وظيفة الانتقال من سطر الى اخر فانا لم اوكل هذه المهم لبروسيجر ولا اعرف كيف استطيع تعريفها في البرنامج وهذه هي المشكلة التي اعاني منها فلو تكرمت اخي ان تخبرني بكيفية استخدامها او صنعها

وانا شكره لك جداً

فقط أحببت أن أعتذر من الأخت نور لأنني وضعت مشاركتي ولم أعد لتصفح المشاركة حتى اليوم ويبدو أنها طلبت مني طلباً ولم أجب ولكن أرى أن الأخوة لم يقصروا في الرد

بصراحة يا جماعة أنا أقع في هذه المشكلة كثيراً وذلك بسبب زياراتي المتقطعة للمنتدى لذلك أرجو من جميع الأخوة والأخوات أن يعذروني إن تأخرت بالرد فهذا ليس إهمال أو عدم حب للمساعدة معاذ الله ولكن أتأخر لأنني ببساطة لم أقرأ المشاركة

والعذر منك مرة أخرى أخت نور

#15

هذا الكود سيعمل معك

For I As Integer = 0 To Dgrd.Rows.Count - 2

'row هذا السطر سيحل المشكلة بتعريف متغير بأسم

'يحمل بيانات كل صف فى الداتا جريد

Dim row As DataGridViewRow = Dgrd.Rows(I)

'وهذه المتغيرات تحمل قيم البيانات الموجودة فى كل صف من الداتا جريد

'ويتم أدخال المتغيرات فى الجدول اى ان كانت قاعدة البيانات

Dim IT_NAME As DataGridViewTextBoxCell = row.Cells(0)

Dim IT_UNIT As DataGridViewTextBoxCell = row.Cells(1)

Dim IT_QU As DataGridViewTextBoxCell = row.Cells(2)

Dim IT_PRICE_IN As DataGridViewTextBoxCell = row.Cells(3)

Dim IT_DISCOUNT As DataGridViewTextBoxCell = row.Cells(5)

Dim IT_COD As DataGridViewTextBoxCell = row.Cells(7)

'/**

Next

كل من فى الوجود يطلب صيداً :::: غير ان الشباك مختلفات

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

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

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

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

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

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