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

عندما تختار اى عنصر في قائمة LISTBOX تظهر بيانات هذا العنصر فى TEXTBOX

مغلق
بدأه Has2 في 27 نوفمبر 2006 · 13 رد · 2,687 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني حاولت ان ابدأ فى عملية الشرح لفكرة DATA BINDING وكيفية الاستفادة منها من خلال محوررين BOUND AND UNBOUND ولكني واجهة مشكله فى البداية من خلال تعاملي مع BOUND .

كل ما اريده هو عندما اختار اى عنصر فى LISTBOX مثلا لو اخترنا الاسم - مباشرة تظهر لي كل البيانات لهذا لصاحب الاسم فى خانات TEXTBOX ولكني لم افلح فى ذلك . نحتاج منكم المســــــاعدة!!!!!

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

selecttnv6.gif

والكود هو :

Imports System.Data.OleDb

Public Class Form1
	Inherits System.Windows.Forms.Form


	Dim con As New OleDbConnection
	Dim str As String
	Dim drv As DataRowView
	Dim health As Integer
	Dim cmdEmp As New OleDbCommand
	Dim daEmp As New OleDbDataAdapter
	Dim dsEmp As New DataSet
	Dim cmdhealth As New OleDbCommand
	Dim dahealth As New OleDbDataAdapter
	Dim dshealth As New DataSet
	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		str = "Provider= microsoft.jet.oledb.4.0;"
		str += "Data Source=C:\Desktop\VS.NET\Employees.mdb"
		con.ConnectionString = str
		con.Open()
		cmdEmp.Connection = con
		cmdEmp.CommandText = ("Select lEmp_id, [szLast_nm]& ',' &[sFirst_nm] as Name,szLast_nm,sFirst_nm,szStreet1_ad, szCity_nm,sState_cd,sZip_cd,sPhone_no,sSSN_tx,dtBirth_dt, cSalary_amt from tblEmployees")

		daEmp.SelectCommand = cmdEmp
		daEmp.Fill(dsEmp, "tblEmployees")
		con.Close()
		lstemployees.DataSource = dsEmp.Tables("tblEmployees")
		lstemployees.DisplayMember = "Name"
		lstemployees.ValueMember = "lEmp_id"
		Me.txtFName.DataBindings.Add("Text", dsEmp, "tblEmployees.sFirst_nm")
		Me.txtLName.DataBindings.Add("Text", dsEmp, "tblEmployees.szLast_nm")
		Me.txtPhone.DataBindings.Add("Text", dsEmp, "tblEmployees.sPhone_no")

	End Sub
	Private Sub fillhealth(ByVal health As Integer)
		dshealth.Clear()
		cmdhealth.Connection = con
		cmdhealth.CommandText = "Select szHealth_nm,iWaitingPeriod_amt,sType_cd from tblHealthCare"
		dahealth.SelectCommand = cmdhealth
		dahealth.Fill(dshealth, "health")
		dtghealth.DataSource = dshealth.Tables("health")
	End Sub
	Private Sub lstemployees_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstemployees.SelectedIndexChanged
		drv = CType(lstemployees.SelectedItem, DataRowView)
		health = CInt(drv(0))
		fillhealth(health)

	End Sub
End Class

تم تعديل هذه المشاركة بواسطة Has2 في 27 نوفمبر 2006 في 21:15

#2

من خلا ل الكود الموجود عندما نعمل RUN للمشروع فنرى التطبيق الآتي فى الصورة والمشكلة ان النتيجة تظهر فقط لعنصر واحد عندما تقوم الفورم بعملية LOAD ولكن عند محاولتي لأختيار اى اسم اخر فلا احصل على اى نتيجة والصورة تثبت ذلك.

runss8.gif

#3

السلام عليكم

أربط كل العناصر بالاعمدة , فقط وستخدم الـ BindingMangerBase Object إذا كان المشروع 2003

أو BindingSource Object إذا كان المشروع 2005 فقط لا غير.

أما إذا كان الاسم في جدول و البيانات في جدول أخر , فيفترض أن تكون عملت RelationShip علاقة

بين الجدولين و المنطق الاول ينطبق عليه تماماً, مع اخذ الاعتبار بتوصيل الجدول من خلال الربط لا من خلال الاصل

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

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

#4

عفوا استاذى الغملاسي

لابد ان اكتب بعض المعطيات مثل ما ذكرت

بالنسبة للمشروع هو على 2003

والبيانات كلها مأخوذه من جدول واحد فقط - ( البيانات في LISTBOX AND TEXTBOX)

حاولت ان افهم Object - BindingMangerBase لكني فشلت فى اكثر من طريقة فيا حبذا ان توضح لى طريقة او مثال على ذلك .

سؤال اخر - ما هو المقصود بـ " أربط كل العناصر بالاعمدة " ؟؟؟

اشكرك على تجاوبك

#5

السلام عليكم

إذا كانت هنالك DataSet و جدول DataTable فالامر سهل للغاية , شاهد المثال التالي:

Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load
		Try
			'Establish The Connection String
			Cnn.ConnectionString = _
			"provider=Microsoft.Jet.OLEDB.4.0; data source=" & _
		   Application.StartupPath & "\DB.mdb"
			Da.Fill(Ds1, "tb")
			lsBox.DataSource = Ds1
			lsBox.DisplayMember = "tb.Words"

			TextBox1.DataBindings.Add(New Binding( _
			 "Text", Ds1, "tb.Definition"))

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

	End Sub

كما تشاهد نقوم بتحميل البيانات ثم نربط القائمة ListBox بالعامو Words في الجدول tb بهذا الشكل tb.Words

ثم نربط الخانة النصية TextBox1 بعامود أخر وهو Definition في نفس الجدول tb

الطريقة الثانية تعتمد على العنصر DataReader إليك ذلك.

Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load
		Try
			'Establish The Connection String
			Cnn = New OleDbConnection
			Cnn.ConnectionString = _
			"provider=Microsoft.Jet.OLEDB.4.0; data source=" & _
		   Application.StartupPath & "\DB.mdb"
			'Callind Data Reader to Load Words
			Load2Columns()
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub

ثم نقوم بجلب البيانات بهذا الشكل

 Private Sub Load2Columns()
		Dim strSQL As String
		Try
			Cnn.Open()
			strSQL = "SELECT * FROM tb"
			Dim cmd As New OleDbCommand(strSQL, Cnn)
			Dim rdr As OleDbDataReader = _
			cmd.ExecuteReader(CommandBehavior.CloseConnection)
			With lsBox
				.BeginUpdate()
				Do While rdr.Read()
					.Items.Add(rdr(0).ToString)
				Loop
				.EndUpdate()
				rdr.Close()
				cmd.Dispose()
			End With
		Catch ex As Exception
			Throw ex
		Finally
			Cnn.Close()
		End Try
	End Sub

ثم في حدث الضغط على مواد صندوق القائمة ListBox نقوم بالتالي :

Private Sub lsBox_SelectedIndexChanged(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles lsBox.SelectedIndexChanged
		Try ' Load the Arabic Definition Word
			LoadDefinition(Me.lsBox.SelectedItem)
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub

نمرر قيمة المادة إلى الاجراء LoadDefinition بهذا الشكل:

Private Sub LoadDefinition(ByVal CurrentWord As String)
		Dim strSQL As String
		Dim Def As String
		Try
			strSQL = "SELECT Definition FROM tb " & _
		   "WHERE Words='" & CurrentWord & "'"
			Dim cmd As New OleDbCommand(strSQL, Cnn)
			Cnn.Open()
			Def = cmd.ExecuteScalar
			Cnn.Close()
			Me.TextBox1.Text = Def.ToString
		Catch ex As Exception
			Throw ex
		Finally
			Cnn.Close()
		End Try
	End Sub

بالنسبةِ لـ BindingMangerBase راجع الرابط التالي

أعني ب أربط كل العناصر بالاعمدة هي عملية DataBinding لا أكثر.

لتحميل المثالين راجع الرابط التالي

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

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

#6

شكرا لك معلمي" الغملاسي "

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

فيجوال دوت نت اصدار 2003 استخدام ADO.NET

Dim con As New OleDbConnection
	Dim str As String
	Dim drv As DataRowView
	Dim health As Integer
	Dim cmdEmp As New OleDbCommand
	Dim daEmp As New OleDbDataAdapter
	Dim dsEmp As New DataSet
	Dim cmdhealth As New OleDbCommand
	Dim dahealth As New OleDbDataAdapter
	Dim dshealth As New DataSet
	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		str = "Provider= microsoft.jet.oledb.4.0;"
		str += "Data Source=C:\Documents and Settings\EXPLORER\Desktop\VS.NET\HND2\Assignment\Employees.mdb"
		con.ConnectionString = str
		con.Open()
		cmdEmp.Connection = con
		cmdEmp.CommandText = ("Select lEmp_id, [szLast_nm]& ',' &[sFirst_nm] as Name,szLast_nm,sFirst_nm,szStreet1_ad, szCity_nm,sState_cd,sZip_cd,sPhone_no,sSSN_tx,dtBirth_dt, cSalary_amt from tblEmployees")

		daEmp.SelectCommand = cmdEmp
		daEmp.Fill(dsEmp, "tblEmployees")


		Me.txtFName.DataBindings.Add("Text", dsEmp, "tblEmployees.sFirst_nm")
		Me.txtLName.DataBindings.Add("Text", dsEmp, "tblEmployees.szLast_nm")
		Me.txtPhone.DataBindings.Add("Text", dsEmp, "tblEmployees.sPhone_no")
		Me.txtAddress.DataBindings.Add("Text", dsEmp, "tblemployees.szStreet1_ad")
		Me.txtCity.DataBindings.Add("Text", dsEmp, "tblEmployees.szCity_nm")
		Me.txtZip.DataBindings.Add("Text", dsEmp, "tblEmployees.sZip_cd")
		Me.txtSocial.DataBindings.Add("Text", dsEmp, "tblEmployees.sSSN_tx")
		Me.txtBirth.DataBindings.Add("Text", dsEmp, "tblEmployees.dtBirth_dt")
		Me.txtSalary.DataBindings.Add("Text", dsEmp, "tblEmployees.cSalary_amt")
		Me.cbostate.DataSource = dsEmp
		Me.cbostate.DisplayMember = "tblEmployees.sState_cd"

		Me.lstemployees.DataSource = dsEmp
		lstemployees.DisplayMember = "tblEmployees.Name"


	End Sub
	Private Sub fillhealth(ByVal health As Integer)
		dshealth.Clear()
		cmdhealth.Connection = con
		cmdhealth.CommandText = "Select szHealth_nm,iWaitingPeriod_amt,sType_cd from tblHealthCare"
		dahealth.SelectCommand = cmdhealth
		dahealth.Fill(dshealth, "health")
		dtghealth.DataSource = dshealth.Tables("health")
	End Sub
	Private Sub lstemployees_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstemployees.SelectedIndexChanged
		drv = CType(lstemployees.SelectedItem, DataRowView)
		health = CInt(drv(0))
		fillhealth(health)


	End Sub
End Class
#7

لا شكر على واجب يا عزيزي

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

#8

عفوا :D بغيت اعرف كيفية عمل binding للــــ Radio buttons اللى موجوديين فى التصميم بخصوص نوع الجنس اما ( ذكر او انثى )

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

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

#9

السلام عليكم

لو تم فصل السؤال عن سابقه لكان أفضل.

بالنسبةِ للسؤال يحتاج لمعرفة نوع الحقل في قاعدة البيانات

فإن كان رقمي أو نصي نكتفي بقيمة رقمية من و إلى

على سبيل المثال نوع الجنس ذكر أم أُنثى ذكر رقم صفر و انثى رقم 1

في الحقيقة لا نربط اي زر ونعمل على جلب البيانات ثم نقوم بالتحقق

من نوع القيمة فإن كانت صفر ضع الزر ذكر مختار غير ذلك نجعل الزر انثى مختار

التحقق سيكون عبر إجراء يتحقق من الصف الحالي فقط ثم نرسل القيمة ,

طبعاً القيمة سترسل لمتغير ما , ليكون في الاخير الادخال و التحديث لذلك الحقل يتم وفق قيمة هذا المتغير.

وارسال القيمة يتم باي طريقة تراها مناسبه, فإن كان عن طريق الـ TableAdapter سيكون نص التحديث

على عاتق المطور وليس عبر المعالج . وهذا يتطلب شيء من الاطلاع قبل العمل.

أما إذا كان الحقل عبارة عن Bit في SQL أو Yes/NO كما هو في الـ Access وهذا هو الافضل بين الخيارين

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

فإن لم يكن ذكر, فستكون حتماً انثى. لكن في الواجهة نستخدم خدعة بسيطة لإظهار الاختيار على الزر أُنثى إن لم يكون اختيار الذكر مختار. إليك ذلك.

 Private Sub TbBS_CurrentChanged(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles TbBindingSource.CurrentChanged
		If Not Me.RdoBtnMale.Checked Then
			Me.RdoBtnFemale.Checked = True
		End If
	End Sub

لكن بالنسبةِ لي أنا لا أحبذ الازرار في الاختيار إلا إذا كانت هنالك ضرورة في ذلك كإختيارات الاسئلة على سبيل المثال.

ودائماً أستخدم الـقائمة المنسدلة عِوضاً عنها مع الـ Lookup Table لإعطاء سرعة جلب الارقام بدل الاسماء.

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

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

#10

الغملاسي استاذي اشكرك على تجاوبك

ولكن يا استاذى العزيز هذا الامر يجعل الفورم تتخبط فى اختيار من ناحية وضع البيانات الى اماكنها الصحيحه .

حبذا ان نرى فكرة اوضح لذلك حتى نطبقها لاني لم اجد فكره واضحه خلال بحثي فى النت ولهذا عندي حاله استغراب اني لم اجد اى رابط يشرح لي عن كيفية ربط Radio button مع قاعدة البيانات .

بحيث عندما اختار اى عنصر فى Listbox ففي خانتين radio buttons عليه ان يختار اسم هذا الشخص اما( ذكر او انثى )

وشكرا لكم على ما تبذلونه من مساعدة لأخوانكم :)

#11
الغملاسي كتب:
السلام عليكم

أربط كل العناصر بالاعمدة , فقط وستخدم الـ BindingMangerBase Object إذا كان المشروع 2003

أو BindingSource Object إذا كان المشروع 2005 فقط لا غير.

أما إذا كان الاسم في جدول و البيانات في جدول أخر , فيفترض أن تكون عملت RelationShip علاقة

بين الجدولين و المنطق الاول ينطبق عليه تماماً, مع اخذ الاعتبار بتوصيل الجدول من خلال الربط لا من خلال الاصل

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

استاذي الغملاسي انا نفذت طريقة ولكن مانفعت علما باني استخدم تطبيقات الانترنت (ويب)

#12

السلام عليكم

اقتباس
علما باني استخدم تطبيقات الانترنت (ويب)

إذا السؤال يجب ان يطرح في منتدى ASP.NET

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

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

#13

:D اولا احب ان ابارك للمشرف العزيز " الغـــملا ســي " لحصول على مرتبة التميز فى العطاء والمساهمة والمشاركة مع كل اخوانه سواء الاعضاء او المشرفين

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

وبعد (h) ...

هل لأحد من الاخوة اى فكرة فى كيفية ربط Radio buttons مع Dataset او ...... كما هو موجود فى المثال فى الاعلى كيف لى ان احدد جنس الشخص بأنه " ذكر " او " أنثى " من خلال استعمالي لأداة Listbox يعنى عندما اختار اسمك فى قائمة Listbox تظهر لى مباشرة النتيجة فى Radio buttons اما Male او Female .

اتمنى ان السؤال واضح :) وشكرا

#14

افضل حل لمشكله radio buttons لمن يعاني مثل مشكلتي يوجد الحل فى الاسطر الآتية

Dim drgender As DataRow

Dim gender As String

Dim current As Integer

\\\\\\\\\'and write the code in listbox click event/////////////

drgender = dataset.Tables("TableName").Rows(current)

gender = drgender("ColumnName")

If (gender = "F") Then

Me.radioFemale.Checked = True

ElseIf (gender = "M") Then

Me.radioMale.Checked = True

End If

current = Me.BindingContext(dsEmp, "TableName").Position

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

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

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

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

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

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