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

مشكلة مع ال DataGridView

مغلق
بدأه عبدالله المنصوري في 6 نوفمبر 2006 · 3 رد · 865 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي قاعدة بيانات محلية متكونة من جدولين (Companies, Employees)، ويربط بينهما مفتاح رئيس في جدول الشركات، وأجنبي في جدول الموظفين هو (CompanyID)، فكل شركة مثلاً بها عشرات أو مئات الموظفين..

ولدي قاعدة بيانات أخرى موضوعة على سيرفر بها نفس الجداول وهي عبارة في تصميمها عن نسخة من قاعدة البيانات المحلية، لكنها تحتوي معلومات أكبر بكثير..

فقمت بعمل برنامج يقوم بجلب معلومات عن بعض الموظفين وشركاتهم من قاعدة البيانات الكبيرة التي على السيرفر لقاعدة البيانات المحلية، وكان هذا البرنامج به DataSet و اثنين DataBindingSource واحدة خاصة بجدول الشركات، والأخرى خاصة بجدول الموظفين، وفي هذا البرنامج ايضا أيضاً DataGridView قمت بربطه بـ EmployeesDataBindingSource، فهو يظهر لي معلومات الموظف بالإضافة إلى CompanyID، وبدلاً من إظهار كود الشركة قمت بعمل بعض التعديلات على الداتا جريد فيو ليقوم بعرض اسم الشركة بدلاً من كود الشركة.

قمت أيضاً بوضع مربعات نص مربوطة أيضاً بالـ EmployeesDataBindingSource، فعندما تختار اي سطر في الداتا جريد فيو، تظهر كامل معلومات ذلك السطر في مربعات النص..

إلى هنا لا توجد أي مشكلة...

ولكن عندما أجلب معلومات شخص معين من قاعدة البيانات على السيرفر، وأقوم بتعيين قيم كل Cell في هذا السطر إلى (مربعات النص على حده!!) تتم إضافة هذا السطر إلى EmployeesDataBindingSource بشكل طبيعي وسلس جداً ثم أقوم بحفظ التعديلات إلى الداتا ست.

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

فهل هناك طريقة لتفادي هذا الخطأ ؟؟ ( أنظر الصورة المرفقة ).

- - - - -

ومشكلة أخرى، في داتا جريد آخر، عندما أجلب سطر البيانات من قاعدة البيانات الكبيرة في السيرفر إلى قاعدة البيانات المحلية (بطريقة يدوية دون استخدام داتا سيت) كيف يمكنني تحديث الداتا جريد ليقوم بتحميل المعلومات مرة أخرى من قاعدة البيانات التي ربطه بها ؟؟

- - - -

وشكراً..

post-88381-1162797517_thumb.jpg

تم تعديل هذه المشاركة بواسطة عبدالله المنصوري في 6 نوفمبر 2006 في 10:19

#2

بالنسبة للمشكلة الاولى هو أن تقوم بوضع DataGridViewComboBoxColumn

بدل من DataGridViewTextBoxColumn لانه العامود يعتمد على رقم الكود لإخراج القيمة المقرؤة.

تستطيع تعديل العامود بشكل مرئي عن طريق الـخاصية Columns ثم تغير الـ Column Type الى المذكور آنفاً.

أو عن طريق الكود بحيث تقوم بتهيئة الـ DataGridView بفسك بشكل برمجي , إليك ذلك.

#Region " Data Grids Binding "

	Private Sub CustomizeMyDataDataGridView()
		Try
			'Create 2 columns.
			Dim StoreColumn As New DataGridViewComboBoxColumn
			Dim ItemColumn As New DataGridViewComboBoxColumn

			'Assign datagridview properties.
			With MyDataDataGridView
				.DataSource = Me.MyDataBindingSource
				.RowHeadersWidth = 20
				.RowTemplate.Height = 25
				.AllowUserToDeleteRows = False
				.Columns.Clear()
				.Columns.AddRange( _
							New System.Windows.Forms.DataGridViewColumn() { _
						   StoreColumn, ItemColumn})
			End With

			'Assign store column properties.
			With StoreColumn
				.DataPropertyName = "myStore"
				.HeaderText = "المستودع"
				.Name = "StoreColumn"
				.Width = 150
				.DataSource = Me.StoreBindingSource
				.DisplayMember = "stora_name"
				.ValueMember = "store_id"
				.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
			End With

			'Assign item column properties.
			With ItemColumn
				.DataPropertyName = "myItem"
				.HeaderText = "الصنف"
				.Name = "ItemColumn"
				.Width = 150
				.DataSource = unfilteredItemBS
				.DisplayMember = "item_name"
				.ValueMember = "item_no"
				.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
			End With
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub

#End Region

السؤال الثاني : بحيث تعدل مسار الاتصال لقاعدة البيانات التي تم تحديثها .

والله أعلم.

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

#3

أخي الفاضل الغملاسي، جزاك الله خيرا على هذا المجهود

ولكن ليس هذا ما أريده، فأنا قمت فعلاً بتغيير ستايل ظهور السيلز.. ولا مشكلة عندي في هذا

ولكن المشكلة عندما أقوم بإضافة سطر جديد للداتا بايندينغ سورس

ثانياً أنا أعمل على سي شارب، ولم أفهم شيء من الكود، وأعتذر لأني لم أبين ذلك في البداية

جزاك الله خيرا

#4

ربما والله أعلم, أن تكمن المشكلة في نوع قيمة الرقم ID فهل هو int أو Tiny

وإنظر ما يقابله في الـ NET. فهذا يسبب مشكلة في عرض القيمة أو تهيئتها Data Format

بالتوفيق والسداد.

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

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

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