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

مجموعة من الاسئلة حول Datagrid ولكن عاجله جدا

بدأه shosho842000 في 6 نوفمبر 2009 · 18 رد · 3,562 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الاسئلة بخصوص الdatagridview واتمنى من الله ان اجد لها ايجابه فى هذا المنتدى الرائع

اولا : عند استخدام كود الاضافه يتم اضافه البيانات من اول

انا استخدم جمله for..loop حتى اتمكن من اضافه اكثر من سطر فى نفس الوقت ولكن مع الاسف يتم اضافه السطور الموجوده مسبقا ايضا ويظهر رساله اعتراض ان الحقل من النوع pk ولا يمكن تكرار الرقم اريد حل لهذا المشكلة

ثانيا : عند عمل بحث باستخدام الtextbox

استخدم الtextbox فى عمليه بحث حيث اكتب رقم الادارة يتم البحث عنه ولكن عند مسح الtextbox اريد ان يظهر جميع السجلات تانى يقوم باستعراض جميع الادارات ولكن يظهر لى خطا : يقول ان الstored procedure يحتاج الى paratmerte وانا لا اقوم بتمريره

ثالثا : اريد عند عمليه الكتابه فى datagrid يقوم بالاعتراض اذا وجد سجل مكرر ويظهر رساله اعتراض ان هذا الرقم مسجل من قبل

البرنامج فى المرفقات وايضا جميع الstored procedure

WindowsApplication4.rar

2.txt

#2

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

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

ثانيا : جرب cmd.Parameters.Clear() قبل تنفيذ stored procedure selectall

ثالثا : جرب هذا الكود :

	Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
		Try
			If cn.State = ConnectionState.Open Then cn.Close()
			cn.Open()
			cmd.Parameters.Clear()
			cmd.CommandType = CommandType.Text
			cmd.CommandText = "select Count(id) from dept where id=@id"
			cmd.Parameters.Add("@id", SqlDbType.Int).Value = DataGridView1.CurrentRow.Cells(0).Value
			Dim n As Integer = CType(cmd.ExecuteScalar(), Integer)
			If n > 0 Then
				MessageBox.Show("هذا الرقم مكرر")
			Else
				Exit Sub
			End If
		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub

المشروع المرفق لا يحوي قاعدة البيانات حتى أجرب التعديلات.

تحياتي...

#3

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

ممكن المساعده فى كود الاستعلام الى فى الحالة الاولى من حيث الاضافه

يعنى ازاى اتاكد من وجود البيانات وشكرا

#4

الكود شبيه جدا بالكود الذي أرفقت. الفرق سيكون في القيمة المراد البحث عنها. بدل ID تحدد الحقل المراد البحث فيه و القيمة المبحوث عنها.

هو نفس الكود.

تحياتي...

#5

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

اولا : شكرا على المتابعه والحلول

ثانيا : لقد قمت بعمل الاكواد المرسله ولكن فى حاله cmd.parameter.clear

هو بيعمل بحث فعلا وبيطلع لى النتيجه ولمن واجعهنى مشكله ثانيه انه بيعرض نتيجه البحث بعد البيانات كلها يعنى لو معروض بيانات الادارات كلها يتم عرض نتيجه البحث فى الاخر ازاى افضى الdatagrid من البيانات بحيث اخلى بيانات البحث بس الى ظاهراه

ملحوظه اخيره فى موضوع تكرار الرقم الكود شغال كويس بس ينفع اعمل التاكد من خلال datagrid مش من خلال database يعنى لو المستخدم دخل اكثر من حقل وهو نسى ودخل حقل من الحقول مرة اخرى عايزاه اقوله ان الرقم مكرر فى حين انه لسه محفظش اعملها ازاى

وشكرا

#6

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

تتم زيادة نتائج جمل الاستعلام واحدة تلو الأخرى على الداتاجريدفيو لأن الكائن tb يتم ملؤه بالبيانات في كل مرة و لأنه معرف على مستوى الفورم و ليس على مستوى الدالة. لحل هذه المشكلة, إما قم بالمناداة على tb.Clear() قبل tb.Load(cmd.ExecuteReader) أو استعمل كائن من فئة DataTable معرف على مستوى الدالة في كل مرة تريد تحميل البيانات من القاعدة.

بالنسبة للتحقق من عدم تكرار بيانات إنطلاقا من الداتاجريدفيو فيمكنك استعمال كود مثل هذا في الحدث CellValidating :

		' لا يمكننا مقارنة الفراغ
		If DataGridView1.Item(e.ColumnIndex, e.RowIndex).EditedFormattedValue <> Nothing Then
			' الحصول على المعلومة التي تمت كتابتها للتو على الخلية الحالية
			Dim v As Integer = DataGridView1.Item(e.ColumnIndex, e.RowIndex).EditedFormattedValue
			' استعراض جميع اسطر الداتاجريد فيو
			For Each row As DataGridViewRow In DataGridView1.Rows
				' تجاهل السطر الجديد الأخير
				If Not row.IsNewRow And Not row.Cells(e.ColumnIndex).Selected Then
					' لا يمكننا مقارنة قيمة بفراغ
					If row.Cells(0).Value <> Nothing Then
						' مقارنة القيمة الجديدة بالقيم الأخرى
						If row.Cells(0).Value = v Then
							' إعلام المستخدم أن المعلومة مكررة و طلب كتابة واحدة أخرى
							MsgBox("المعلومة التي تم إدخالها مكررة, المرجو تحديد واحدة أخرى...")
							' البقاء على نفس الخلية
							e.Cancel = True
							Return
						End If
					End If
				End If
			Next
		End If

ملاحظة : المتغير v يجب أن يأخد نوع البيانات في العمود المراد مراقبة بياناته. و كذلك رقم العمود 0 الذي استعملت في الكود أعلاه.

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 7 نوفمبر 2009 في 18:22

#7

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

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

يبقى لى سؤال حول datagridview ايضا وهو كيفية اضافه combobox فى datagrid

يعنى عايزاه اسجل معلومات الادارة الرقم - الاسم - المدير - القسم عايزاه لما يسجل القسم يختار من الcombox بس عايزاه يعرض اسماء القسم فى combox ويسجل فى قاعده البيانات الرقم بتاع الاداراة

وشكرا

#8

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

أولا, قومي بزيادة عمود جديد إلى الداتاجريدفيو من نوع DataGridViewComboBoxColumn. قومي بتحديد الخاصية DataSource للعمود على الجدول الذي به الأسماء. ثم تحديد الخاصية DisplayMember على اسم الحقل الذي به الأسماء التي ستظهر للمستخدم. ثم تحديد الخاصية ValueMember على اسم الحقل الذي به معرفات ID الأسماء.

و هذه الطريقة البرمجية. لنفترض أن رقم العمود الذي تمت زيادته هو 1

		Dim cln As System.Windows.Forms.DataGridViewComboBoxColumn = DataGridView1.Columns(1)
		cln.DataSource = DatSourceObject ' الجدول المرتبط الذي يحوي الأسماء
		cln.DisplayMember = "اسم حقل به الأسماء التي ستظهر"
		cln.ValueMember = "اسم حقل به معرفات الأسماء التي ستظهر"

تحياتي...

#9

شكرا على الرد

بس هو مفيش طريقة تانية غير الطريقة دى للcombox لانىمستخدمه هذه الطريقة وابحث عن طريقة اخرى

ثانيا : بالنسبه للاكواد المرسله عند استخدام tb.clear قبل الكود tb(cmd.executereader) يتم عمل سطر فاضى فقط ولا يوجد بيه بيانات ؟؟؟؟؟؟؟؟؟؟؟؟؟

فى ملاحظة تانية :

بخصوص منع تكرار الرقم فى datagrid استخدمت الكود المرسل ولكن يظهر error

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

اشتغل بس فى حاجة غريبه انه بيمسح الخليه خالص بعد لما اخلص كتابه فيها يتم مسحها ؟؟؟؟؟

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

#10

tb.Clear() تقوم بمسح محتوى tb من السطور و إذا كان هناك فراغ بعد tb.Load(cmd.ExecuteReader()) فهذا يعني أن جملة الإستعلام لم تأت بنتيجة بعد عملية البحث.

بخصوص كود منع التكرار, أنا كتبت لك هذه الملاحظة كي تقومي بتحرير الكود ليعمل على مشروعك :

اقتباس
ملاحظة : المتغير v يجب أن يأخد نوع البيانات في العمود المراد مراقبة بياناته. و كذلك رقم العمود 0 الذي استعملت في الكود أعلاه.

تحياتي...

#11

انا استخدمت tb.clear قبل تحميل البيانات فى tb .load

بس الكود المفروض يجيب بيانات فعلا لانه فى رقم بالادارة دى ؟؟؟؟؟؟؟؟

بالنسبه للcombox

اتمنى ان اجد طريقة تانية غير الطريقة دى لانى اراى الكثير من الاكواد ولكن لسه بهذه الطريقة حيث تكون بشكل احترافى شوية لان هذه الطريقة ممكن تكون بدائية

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

#12
اقتباس
اتمنى ان اجد طريقة تانية غير الطريقة دى لانى اراى الكثير من الاكواد ولكن لسه بهذه الطريقة حيث تكون بشكل احترافى شوية لان هذه الطريقة ممكن تكون بدائية

شكراً

#13

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

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

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

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

وهو فعلا فى رقم ادارة بالرقم المسعلم عنه

#14

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

لو أمكن أن ترفقي المشروع مع قاعدة البيانات حتى أتمكن من تفحص مشكلة الاستعلام أكثر...

تحياتي...

#15

هو شكرااااااااااااا جزيلا على مساعدتك ليا الحمد الله المشكله اتحلت خلاص

بس ليا طلب بقى عايزاه فى موضوع الحذف اعمل حاجة زى الcheckbox زى موضوع الاميل بحيث اقدر احذف اكثر من سطر فى نفس اللحظة وشكرا

لانى بضيف واعدل اكثر من سطر ولكن عند الحذف بحذف سطر سطر بس فا عايزاه اعمل الطريقة دى بحيث يكون الحذف ايضا اكثر من سطر

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

#16

الحمد لله...

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

سؤال في الداتا قريد تشك بوكس

تحياتي...

#17

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

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

Conversion from string "مخازن" to type 'Integer' is not valid.

هو المفروض الترتيب فى العرض

id-name,id_part,dept_id

دى قاعده البيانات

id unique

id_part primarykey

name varchar(50)

dept_id int this is forginkey

الى بيتم عرضه فى datagrid

هو id,id_part,name

والid دا مخفى

عايزاه وهو بيعمل تعديل ياخذ طبعا رقم الادارة من الداتا جريد الاولى

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

عايزاه لما يكتب رقم الادارة يتم اظهار الادارة بالاقسام الى فيها بس مش عارفا تتم ازاى هل اكتفى باظهار رقم الادارة فى مربع النص

ومن بعدها اظهار الاقسام فى الداتا جريد واحده بس ولا يتم اظهار الاداراه فى الداتا جريد الاولى والاقسام فى الثانيه

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

المشروع مع stored فى المرفقات

WindowsApplication9.rar

3.txt

#18

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

يوجد لدى مشكلة فى التعامل مع الحذف ارفقت المشروع ايضا

هو شغال كويس فى حذف واحد ولكن ماذا لو اردت حذف اكثر من سجل فى وقت واحد

ودا كود االحذف

ALTER PROCEDURE [dbo].[deletepart]

-- Add the parameters for the stored procedure here

@id int

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

delete from part where id=@id

END

WindowsApplication4.rar

#19

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

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

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

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