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

سؤال فى تحويل Combox من خلال Datagrid

بدأه shosho842000 في 16 نوفمبر 2009 · 47 رد · 3,411 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#26

اه تمام اصلى باستخدم النوع int فقط وليس bigint

تانى حاجة الكود دا مش شغال كويس ليه ؟؟؟؟

 Dim clmn As DataGridViewComboBoxColumn = DirectCast(DataGridView1.Columns(2), DataGridViewComboBoxColumn)
		Dim tb1 As New DataTable
		cmd.CommandText = "select id,name from job_group"
		tb1.Load(cmd.ExecuteReader)
		clmn.DataSource = tb1
		clmn.DisplayMember = "name"
		clmn.ValueMember = "id"

بيظهر الخطا دا

Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxColumn' to type 'System.Windows.Forms.DataGridViewComboBoxColumn'.

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

هل يوجد تصحيح ليه ؟؟؟؟؟؟؟؟؟؟؟؟؟

#27

الحقل رقم 2 يجب أن يكون أصلا من نوع DataGridViewComboBoxColumn. الـ cast هنا فقط للحصول على الكائن الممثل للعمود من مجموعة الأعمدة Columns و ليس لتحويل الكائن من نوع إلى آخر. أظنني أرفقت كودا يقوم بتغيير نوع عمود عن طريق حذف القديم و وضع مكانه عمود بنفس الخصائص من النوع المطلوب.

#28

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

فى حاجة غريبة شوية فى حاله الاضافه بقى لقد قمت بكتابه الكود الاتى

   For x As Integer = 0 To DataGridView1.Rows.Count - 1
			Dim id, group As Integer
			Dim name As String
			id = DataGridView1.Rows.Item(x).Cells(0).Value
			name = DataGridView1.Rows.Item(x).Cells(1).Value
			group = DataGridView1.Rows.Item(x).Cells(2).Value

			Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM job WHERE id=@id", cn)
			cmd2.Parameters.AddWithValue("@id", id)
			Dim count As Integer = cmd2.ExecuteScalar()
			If count > 0 Then
				Continue For
			End If

			cmd.Connection = cn
			cmd.CommandType = CommandType.Text
			cmd.Parameters.Clear()

			cmd.CommandText = "insert into job values (@name1,@group1)"
			cmd.Parameters.Add("@name1", SqlDbType.VarChar).Value = name
			cmd.Parameters.Add("@group1", SqlDbType.BigInt).Value = group
			cmd.ExecuteNonQuery()

		Next
		MessageBox.Show("تم الحفظ ")

يقوم باخذ نفس الحقول هى هى زى test1 and test2 ويضفهم تانى ليه

؟؟؟؟؟؟؟؟؟؟؟؟

مش بضيف البيانات الى انا كاتبها

#29

لأنك تعيدين تسجيل كامل محتوى الداتاجريدفيو من أول سطر إلى آخر سطر :

For x As Integer = 0 To DataGridView1.Rows.Count - 1
#30

ظهرى هذا الخطا

Parameterized Query '(@name1 varchar(8000),@group1 bigint)insert into job values (@na' expects parameter @name1, which was not supplied.

ويتم الوقوف على هذا السطر

cmd.ExecuteNonQuery()

#31

جملة سكل المحددة تنتظر وسيط اسمه @name لم يتم إدراجه.

إذا كنت تقصدين الكود المرفق في آخر رد لك فإنك لم تقومي بتحديد عدد حروف الوسيط @name1 في الخاصية Size

#32

نفس المشكلة ايضا

  For x As Integer = 0 To DataGridView1.Rows.Count - 1
			Dim id, group As Integer
			Dim name As String
			id = DataGridView1.Rows.Item(x).Cells(0).Value
			name = DataGridView1.Rows.Item(x).Cells(1).Value
			group = DataGridView1.Rows.Item(x).Cells(2).Value

			'Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM job WHERE id=@id", cn)
			'cmd2.Parameters.AddWithValue("@id", id)
			'Dim count As Integer = cmd2.ExecuteScalar()
			'If count > 0 Then
			'	Continue For
			'End If

			cmd.Connection = cn
			cmd.CommandType = CommandType.Text
			cmd.Parameters.Clear()

			cmd.CommandText = "insert into job values (@name1,@group1)"
			cmd.Parameters.Add("@name1", SqlDbType.VarChar).Value = name
			cmd.Parameters("@name1").Size = 50
			cmd.Parameters.Add("@group1", SqlDbType.BigInt).Value = group
			cmd.ExecuteNonQuery()

		Next
		MessageBox.Show("تم الحفظ ")

الكود بعد التعديل والخطا هو

Parameterized Query '(@name1 varchar(50),@group1 bigint)insert into job values (@name' expects parameter @name1, which was not supplied.

#33

فإذن الخلية التي تمت إحالة قيمتها إلى المتغير name فارغة تساوي Nothing و قد سبق أن تكلمنا عن هذه الحالة.

#34

للاسف هيا مش فاضيه فيها بيانات

؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#35

أرفقي المشروع

#36

البرنامج قاعده البيانات التى ارفقتها

WindowsApplication12.rar

#37

كيف لم ألاحظ الخطأ؟!

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

WindowsApplication12.rar

#38

تمام كدا بس هو ايه الى تم تغغيره

لا كدا مش تمام هو بيظهر رساله تم الحفظ بس مش بيتم الحفظ كما يجب

؟؟؟؟؟؟؟؟؟؟؟

يعنى مفيش رساله خطا بتظهر ولكن تظهر رساله الخطا

وشكرا

كيف يتم مسح هذا السطر او تجاهله حيث انه يتم جلب اخر سطر ؟؟؟؟؟؟؟؟؟

#39

هو تمام و لا مش تمام؟

هو فيه رسالة خطأ و لا مفيش؟

بالنسبة لتجاهل السطر الأخير, تم تغيير هذا السطر :

  For x As Integer = 0 To DataGridView1.Rows.Count - 1

بهذا السطر :

  For x As Integer = 0 To DataGridView1.Rows.Count - 2
#40

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

غيرت كما طلبت ولا تاثير

هو مفيش رساله خطا بتظهر بيظهر تم الحفظ ولكن يتم حفظ البيانات الموجوده فقط

#41

ما الذي *مش تمام*؟

المرجو دائما إرفاق نص رسالة الخطأ و السطر الذي تم فيه الخطأ.

بالنسبة للمشروع الذي أرفقت في رد سابق فهو يعمل عندي بدون أخطاء

آه, انتبهي لهذا السطر و قومي بكتابة اسم خادم سكل الذي تعملين عليه مكان ./SQLEXPRESS

cn.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=employee company;Integrated Security=True"
#42

اه منا غيرته علشان يشتغل عندى

هو مفيش اى رساله خطا تظهر هو بيقولى انه تم حفظ البيانات ولكن يعرض لى test1 and test2 مرة اخرى

يعنى دلوقتى لو دخلت سجل جديد يقوم باظهار لى text1 and test2 مرة اخرى حتى لو دخلت سجل واحد يقوم بتكرار دائما هذاين السجلين

وشكراااااااااااااا

يقوم بمسح اخر سجل قمت بتحريره ؟؟؟؟؟ لو شغال عندك كويس ومتاكد انه بيضيف سجلات جديده

ارساله من تانى

#43

إذا لم يعمل الكود التالي فالمشكلة قد تكون في قاعدة البيانات أو البيانات نفسها أو في طريقة استخدام التطبيق لأنني جربت المشروع جيدا قبل تحميله في ردي السابق, الكود :

		If cn.State = ConnectionState.Open Then cn.Close()
		cn.Open()
		For x As Integer = 0 To DataGridView1.Rows.Count - 1
			If Not DataGridView1.Rows.Item(x).IsNewRow Then
				Dim id, group As Integer
				Dim name As String
				id = DataGridView1.Rows.Item(x).Cells(0).Value
				name = DataGridView1.Rows.Item(x).Cells(1).Value
				group = DataGridView1.Rows.Item(x).Cells(2).Value

				Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM job WHERE id=@id", cn)
				cmd2.Parameters.AddWithValue("@id", id)
				Dim count As Integer = cmd2.ExecuteScalar()
				If count > 0 Then
					Continue For
				End If

				cmd.Connection = cn
				cmd.CommandType = CommandType.Text
				cmd.Parameters.Clear()

				cmd.CommandText = "insert into job values (@id, @name1,@group1)"
				cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id
				cmd.Parameters.Add("@name1", SqlDbType.VarChar).Value = name
				cmd.Parameters("@name1").Size = 50
				cmd.Parameters.Add("@group1", SqlDbType.BigInt).Value = group
				cmd.ExecuteNonQuery()
			End If

		Next
		MessageBox.Show("تم الحفظ ")

لنرى من منا سيستسلم أولا, أنا أم أنت! :D

#44

انا استسلمت خلاص بس ما المطلوب منى

ازاى اعالج الموضوع دلوقتى ؟؟؟؟؟؟؟؟؟

#45

هو لحد الان المشكله مازالت قائمه انه بيمسح اخر سطر تم تحريره ؟؟؟؟؟؟؟؟؟؟؟؟؟\

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

ما العمل ؟؟؟؟؟؟؟؟؟؟؟

حتى لو استعرضت البيانات المحفوظة مش هلاقى اى حاجة لانه محفظش حاجة ؟؟؟؟

بيظهر الرساله وخلاص ويتم مسح اخر سطر

الكود الى مكتوب هو الى انتا باعته اخر حاجة

#46

المشروع المرفق مع هذا الرد السابق يعمل جيدا. تمت تجربته للتو

#47

هو للاسف مش شغال معايا نفس الملاحظات هى هى انه بيظهر رساله تم الحفظ ومفيش اى اخطاء

ولكن مفيش اى بيانات بتتم الحفظ

#48

استاذ محمد رضى مرضدش عليا فى الحاله الى انا فيها

اعمل ايه لان البرنامج يعمل عندك جيد ولكن عندى يتم عدم تجاهل السطر الاخير

زى ما ذكرت لحضرتك قبل كدا

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