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

تحديد مجموعة بيانات معينة من اللست بوكس لإظهار في الداتا قريد

مغلق
بدأه Usef_2006 في 15 يوليو 2006 · 10 رد · 1,572 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ListBox.zip

db1.rar

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

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

عندي جدولين

الجدول الأول : يتكون من حقلين الأول رقم( ترقيم تلقائي وهو مفتاح أساسي ) والثاني نوع المأكولات ( من نوع نص )

الجدول الثاني : يتكون من أربعة حقول الأول رقم ( ترقيم تلقائي ) والثاني ( رقم نوع المأكولات ) وهذا الحقل هو الرابط بين الجدولين ، أما الحقل الثالث فهو ترقيم لأصناف المأكولات أما الرابع فهي أصناف المأكولات .

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

فأتمنى منكم أن تجدوا لي الحل

والله يرزقكم بالحور العين في الجنة ويسقيكم من نهر حوض نبينا محمد عليه أفضل الصلاة والسلام

وهناك ملف مرفق فيه المشروع مع قاعدة البيانات وكذلك القاعدة مرفقه إيضا

#2

الله يسهل أموركم كلها

ردوا علينا

#3

14 قارئ لمشاركتي ولكن دون حل لمشكلتي

الله يسكنكم الفردوس الأعلى من الجنة جاوبوا على سؤالي لأن مشروعي واقف على هذه المشكلة

#4

السلام عليكم

فقط انشئ مصفوفة لأخذ اكثر من قيمة بدل DataRowView

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

	' هنا متغير لتحديد اتصال قاعدة البيانات والمسماة دي بي واحد
	Dim cnn As New OleDbConnection( _
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\db1.mdb;")




	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		Try


			'هنا استعلام لتحديد الحدول الذي سيظهر في اللست بوكس
			Dim sql As String = "SELECT  *  from Bekalh"

			'==========================
			'هنا متغير لتعبئة مجموعة البيانات من القاعدة
			Dim dr As OleDb.OleDbDataAdapter
			'نسخة جديدة من المتغير السابق
			dr = New OleDbDataAdapter(sql, cnn)
			'هنا متغير داتا سيت لتعبئة البيانات
			Dim ds As New DataSet
			dr.Fill(ds, "sql")
			'تحديد مصدر البيانات التي ستعبأ في اللست بوكس
			ListBox1.DataSource = ds.Tables("sql")
			'تحديد الحقل المراد أخذ البيانات منه
			ListBox1.DisplayMember = "TypeE"
			ListBox1.ValueMember = "ID"

		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


		Try

			'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
			Dim arrListQuery As New ArrayList

			'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس

			'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة 
			'Value ... SelectedIndices(i)

			For i As Integer = 0 To Me.ListBox1.Items.Count - 1

				If Me.ListBox1.GetSelected(i) Then
					'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
					'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
					arrListQuery.Add( _
					"SELECT Bekalh.TypeE, Asnaf.Senf1 FROM Bekalh " & _
					"INNER JOIN Asnaf  ON  Bekalh.ID = Asnaf.IDTypeE " & _
					"WHERE Asnaf.IDTypeE = " & CInt(i + 1).ToString)

				End If

			Next

			'=========================

			'==========================
			'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
			Dim da As OleDb.OleDbDataAdapter

			da = New OleDbDataAdapter(Nothing, cnn)
			'هنا تحديد متغير داتا سيت لتخزين البيانات
			Dim ds As New DataSet


			For i As Integer = 0 To arrListQuery.Count - 1

				If Not IsNothing(arrListQuery(i)) Then

					'Assign the query string.
					da.SelectCommand.CommandText = arrListQuery(i).ToString

					'تعبئة مخزن البيانات من الاستعلام المحدد
					da.Fill(ds, "sqldatagrid")
				End If
			Next



			'تحديد بيانات الداتا قريد التي ستعبأ
			Me.DataGrid1.DataSource = ds.Tables("sqldatagrid")

			'Destroy object.
			arrListQuery = Nothing


		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub

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

ListBox.rar

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

#5

رحم الله والديك وأشكرك على ردك هذا الشكر الجزيل

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

Fill : SelectCommand.Connection property has not been initialized

وإن كلفنا عليك زيادة عن اللزوم نرجو التوضيح

وجعل ذلك في موازين حسناتك

#6

السلام عليكم

انسخ الكود ككل و استبدله , ابتداءً من تعريفك لعنصر الاتصال

اقتباس
Fill : SelectCommand.Connection property has not been initialized

هذه الرسالة تقول أنك لم تزود الـ DataAdapter بعنصر الاتصال في الامر Select Command كما انا فعلت في الكود التالي:

 da = New OleDbDataAdapter(Nothing, cnn)

حيثُ cnn هو عنصر الاتصال.

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

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

#7

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

#8

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

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

افترض أن الرقم الخاص بالفاكهة (1) والرقم الخاص بالعصيرات (2) والرقم الخاص بالخضار 10 وهكذا عندما استخدمت طريقة الأخ الغملاسي نجحت معاي عندما اختار رقم الفاكهة وهو (1) ورقم العصيرات (2) تظهر لدي البيانات ولكن لو اخترت معها الرقم الخاص بالخضار (10) لن تظهر بيانات الخضار وذلك السبب أنه يعتمد في الترقيم على فهرسة اللست بوكس وليس فهرس حقل الرقم الخاص بقاعدة البيانات

فما هو الحل ؟ ( مع أنني حاولت بشتى الطرق ولكن دون فائدة )

ولكم مني خاص الدعاء

تم تعديل هذه المشاركة بواسطة Usef_2006 في 18 يوليو 2006 في 17:13

#9

:( :( :(

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

واستودعتكم الله الذي لا تضيع ودائعه

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

:unsure: :unsure: :unsure:

#10

السلام عليكم

نعم يحفظك الله كما قلت أننا اعتمدنا فهرس الـ ListBox عن فهرس قاعدة البيانات (وهذا بلا شك خطأ )

لكن السبب وراء ذلك هو ان العنصر ListBox لا يمكننا من معرفة أكثر من SelectedValue .

لذلك الحل الحالي يعتمد على خدعة trick تتمحور بالتالي .

أولاً نقوم بحفظ كل الفهارس التي تم اختياراها في ListBox ونضعها في مصفوفة .

ثانياً نقوم باستخدام السلوك SetSelected الذي يمكننا من وضع الاختيار بشكل برمجي على مواد القائمة ListBox

ثم نختار الـ SelectedValue من المادة المختارة و نجلب القيمة من قاعدة البيانات وفقاً لجملة الاستعلام التي كتبتها انت.

ثم نعاود الكرة مرة وفقاً للمواد المختارة وذلك عن طريق الحلقة For على المصفوفة التي أخذت القيم المختارة في القائمة ListBox.

شاهد النصوص البرمجية في ذلك.

 ' هنا متغير لتحديد اتصال قاعدة البيانات والمسماة دي بي واحد
	Dim cnn As New OleDbConnection( _
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\db1.mdb;")

	'ArrayList collect item indexes.
	Private arrListGetIndex As New ArrayList

	'DataSet of whole application.
	Private ds As New DataSet

	'Boolean var clear the childTable if exist.
	Private IsNotFirstTimeLoading As Boolean = False


	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		Try

			'هنا استعلام لتحديد الحدول الذي سيظهر في اللست بوكس
			Dim sql As String = "SELECT  *  from Bekalh"

			'==========================
			'هنا متغير لتعبئة مجموعة البيانات من القاعدة
			Dim dr As OleDb.OleDbDataAdapter
			'نسخة جديدة من المتغير السابق
			dr = New OleDbDataAdapter(sql, cnn)


			dr.Fill(ds, "sql")

			With ListBox1

				'Assign the selectedmode to multi.
				.SelectionMode = SelectionMode.MultiExtended

				'تحديد مصدر البيانات التي ستعبأ في اللست بوكس
				.DataSource = ds.Tables("sql")

				'تحديد الحقل المراد أخذ البيانات منه
				.DisplayMember = "TypeE"

				.ValueMember = "ID"

			End With


		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

		Try

			With ListBox1

				'Clear the arryList Items.
				arrListGetIndex.Clear()

				For i As Integer = 0 To .Items.Count - 1

					'Get the Selected Indexes.
					If .GetSelected(i) Then
						arrListGetIndex.Add(i)
					End If

				Next

				'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
				Dim da As OleDb.OleDbDataAdapter

				da = New OleDbDataAdapter(Nothing, cnn)
				'هنا تحديد متغير داتا سيت لتخزين البيانات

				'Check if table exist and loaded then clear it.
				If IsNotFirstTimeLoading Then
					ds.Tables("childTable").Clear()
				End If

				For i As Integer = 0 To arrListGetIndex.Count - 1

					'Set the selected item depend on index.
					.SetSelected(CType(arrListGetIndex(i), Integer), True)

					'Assign the query string.
					da.SelectCommand.CommandText = _
					"SELECT Bekalh.TypeE, Asnaf.Senf1 FROM Bekalh " & _
					"INNER JOIN Asnaf  ON  Bekalh.ID = Asnaf.IDTypeE " & _
					"WHERE Asnaf.IDTypeE = " & .SelectedValue.ToString


					'تعبئة مخزن البيانات من الاستعلام المحدد
					da.Fill(ds, "childTable")

					'تحديد بيانات الداتا قريد التي ستعبأ
					Me.DataGrid1.DataSource = ds
					Me.DataGrid1.DataMember = "childTable"


					'Clear the Selection Items.
					.ClearSelected()
					.SelectedIndex = -1

				Next

				'Assign true after the first time button click.
				IsNotFirstTimeLoading = True

			End With
			'=========================

			'==========================

		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub

ListBox1.rar

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

#11

:rolleyes: أثلج الله صدرك بالإيمان ورزقك بالـــــمال والولدان :rolleyes:

:rolleyes: وغفر الله لك ولوالديك ولزوجتك وذريتك وجمعــــكم :rolleyes:

:rolleyes: فـــــــــــــــــــي الفردوس الأعــــــــــــــلى من الجنة :rolleyes:

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

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

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

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

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

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