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

تضارب في العلاقات

مغلق
بدأه فواز الشمري في 10 مايو 2007 · 4 رد · 737 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية :

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

على 2005 لدي جدولين

الأول به اسماء الدول - مفتاح الإتصال لكل دولة :

id

name

key

علما ان id هوا pk وليست مشكلة ان كان key هوا مفتاح اساسي

الجدول الثاني هوا جدول بيانات من ضمنة الحقل الإجنبي الخاص بأسماء الدول key

عملت datagridview فيه حقل combobox .

المشكلة التي لدي اني اريد ان اسمح بالتعديل والإضافة على نفس datagridview .

وبذلك عند العرض ..

اريد ان تقوم combobox بعرض جميع اسماء الدول بالكامل وعند الإختيار على دولة محددة وعمل حفظ يتم تخزين الحقل key والذي يمثل رقم مفتاح الدولة في الجدول الثاني والي هوا جدول البيانات .. وعند فتح البرنامج مره اخري يتم التأشير تلقائيا على اسم الدولة المختارة في الجدول الثاني .. كيف يكمن عمل ذلك .. حاولت لكن حدث مشاكل معي كثيرة .

اتمنا لو اجد لها حل فقد ارهقتني كثير

#2

ممكن ارفاق ملفك للاطلاع حيث ان الطرق المستخدمه كثيره ؟؟؟

بالتوفيق ,,,,

A7med_prof

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#3

ارفقت لك مثال بسيط اخي الفاضل لأنه المشروع كبير وما قدرت ارفعة بالكامل بس اهم شي الفكرة.

مرفق في المثال :

جدولين الأول الدول والثاني البيانات التفصيلية .

شكرا لك مره اخرى لتعاونك .

WindowsApplication1.zip

#4

السلام عليكم

حياك الله اخي فواز , في الحقيقة هنالك أكثر من حلول لذلك, لكن قبل طرحها , أحببت أن انوه على عدة مسائل مهمة

هو الى الان لم أدرك لماذا يعزف الكثيرون منا عن استخدام المعالج السحري Wizard هل هو يضر سمعة المبرمج ام ماذا ؟

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

على سبيل المثال اسم الحقل في جدول العناوين هو name و اسم الحقل في جدول الدول هو name ? وهذه مضيعة اخي فواز

وانت انسان قديم في هذه الشغل ينبغي ان تكون تجاوزتها منذ زمن ليس بالقريب...

أرجو ان لا تنصدم بالمثال لانه تم تغير بعض اسماء الحقول في جدول الدول , كذلك هو معمول على 2005

و تم استخدام المعالج السحري لجلب البيانات و عناصر الربط و المتحكمات فيه..

كل الذي عليك ان تستخدم الحدث CellEndEdit لجلب قيمة القائمة المنسدلة ثم تبحث من خلال تلك القيمة عن قيمة المفتاح للدولة

و تضعها في نفس السطر و بالتحديد في نفس الخلية للعامود key في جدول العناوين ..

شاهد المرفق فيه بعض النصوص البرمجية و وظيفة البحث ..

#Region " Data Grids Binding "

	Private Sub CustomizeAddressDataGridView()
		Try
			'sorting Country Table depend on CountryName..
			CountryBindingSource.Sort = "CountryName"
			'Create 4 columns.
			Dim NameColumn As New DataGridViewComboBoxColumn
			Dim CountryKeyColumn As New DataGridViewTextBoxColumn
			Dim AddressColumn As New DataGridViewTextBoxColumn
			Dim NoteColumn As New DataGridViewTextBoxColumn


			'Assign datagridview properties.
			With AddressDataGridView
				.DataSource = Me.AddressBindingSource
				.RowHeadersWidth = 20
				.RowTemplate.Height = 25
				.AllowUserToDeleteRows = False
				.Columns.Clear()
				.Columns.AddRange( _
							New System.Windows.Forms.DataGridViewColumn() { _
						   NameColumn, CountryKeyColumn, AddressColumn, NoteColumn})
			End With


			With NameColumn
				.DataPropertyName = "name"
				.HeaderText = " الدولة"
				.Name = "NameColumn"
				.Width = 150
				.DataSource = Me.CountryBindingSource
				.DisplayMember = "CountryName"
				.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
				.AutoComplete = True
			End With


			With CountryKeyColumn
				.DataPropertyName = "countrykey"
				.HeaderText = "رمز الدولة"
				.Name = "CountryKeyColumn"
				.Width = 120
				.ReadOnly = True
			End With


			With AddressColumn
				.DataPropertyName = "address"
				.HeaderText = "العنوان"
				.Name = "AddressColumn"
				.Width = 120
			End With

			With NoteColumn
				.DataPropertyName = "note"
				.HeaderText = "الملاحظات"
				.Name = "NoteColumn"
				.Width = 120
			End With





		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub

#End Region

#Region " Cell End Edit "

	Private Sub AddressDataGridView_CellEndEdit( _
		ByVal sender As Object, _
		ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
		Handles AddressDataGridView.CellEndEdit

		'Check that if we are on NameColumn Column.
		If AddressDataGridView.Columns( _
		e.ColumnIndex).Name = "NameColumn" Then

			'Creat new ComboboxCell & Get current value 
			Dim dgcb As DataGridViewComboBoxCell = _
			CType(AddressDataGridView(e.ColumnIndex, e.RowIndex _
			), DataGridViewComboBoxCell)

			'Check that if there's a valid value.
			If dgcb.Value IsNot Nothing Then

				'Get Country Key by FindCountryByName Function..
				Dim obj As Object = FindCountryByName(dgcb.Value)

				'Add Returned Value Key to Current Key Cell Object.
				AddressDataGridView(1, e.RowIndex).Value = (obj.ToString)

			End If

		End If

	End Sub

#End Region

#Region " DataGridView Data Error "

	Private Sub MyDataDataGridView_DataError(ByVal sender As Object, _
	ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles AddressDataGridView.DataError

		'Handle the convert error when attempt to convert comboboxcell value

		If (e.Context = DataGridViewDataErrorContexts.Commit) _
			Then
			MessageBox.Show("Commit error")
		End If
		If (e.Context = DataGridViewDataErrorContexts _
			.CurrentCellChange) Then
			MessageBox.Show("Cell change")
		End If
		If (e.Context = DataGridViewDataErrorContexts.Parsing) _
			Then
			MessageBox.Show("parsing error")
		End If
		If (e.Context = _
			DataGridViewDataErrorContexts.LeaveControl) Then
			MessageBox.Show("leave control error")
		End If

		If (TypeOf (e.Exception) Is ConstraintException) Then
			Dim view As DataGridView = CType(sender, DataGridView)
			view.Rows(e.RowIndex).ErrorText = "an error"
			view.Rows(e.RowIndex).Cells(e.ColumnIndex) _
				.ErrorText = "an error"

			e.ThrowException = False
		End If

	End Sub
#End Region

#Region " Functions Routines "

	Private Function FindCountryByName(ByVal CountryName As String) As String
		Dim column As DataColumn
		Dim row As DataRow
		For Each row In Me.DS.Tables("country").Rows
			For Each column In DS.Tables("country").Columns
				If row(column).ToString = CountryName Then
					Return row(2).ToString
				End If
			Next
		Next
		Return String.Empty
	End Function

#End Region

بالتوفيق و السداد إن شاء الله.

WindowsApplication1.rar

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

#5

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

المشكلة اني مستخدام علاقات في الكود لم يكن لها اي داعي والحل كما فعلت انت في المثال ..

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

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

اما بالنسبة للأسماء الخاصة بالجداول:

اتفق معك في كل ما قلت ولكن المثال الذي قمت بإرفاقة عملته لمجرد التجربة عليه فقط لا غير .. وأنا مؤيد لفكرة تسمية الأدوات والمتغيرات بأسماء تدل على محتوياتها فهوا الأسلوب الصحيح ..

اكرر شكري لك خي الفاضل واتمنا لك دوام الصحة والعافية ..

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

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