السلام عليكم ورحمة الله
هذا مثال جاهز من هذا المنتدى احتفظت به لسهولته فيه دوال حلوة لتعبئة ComboBox وأخرى لقراءة سجل بناء على استعلام،
لاحظ انه استخدم الحدث الأفضل SelectionChangeCommitted وليس SelectedIndexChanged
جربه بدل الموجود عندك وإن شاء الله تجد فيه الفائدة
PHP كود :
Imports System.Data.OleDb
Public Class Form1
' نص الاتصال بقاعدة البيانات '
Public connString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|\Database1.accdb;"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
' ComboBox استدعاء تعبئة صندوق السرد '
ComboBox_Fill(Me.ComboBox1, connString, "table1", "name", "id")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
' SelectionChangeCommitted الاختيار من صندوق السرد باستخدام الحدث '
Private Sub ComboBox1_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
' إذا كان نص الاتصال بقاعدة البيانات موجود على شكل نص '
Dim row As DataRow = GetDataRow(connString, " SELECT * FROM [table1] WHERE [id]=" & ComboBox1.SelectedValue)
If row IsNot Nothing Then
Me.TextBox1.Text = row("address") ' العنوان '
Me.DateTimePicker1.Value = row("birthdate") ' تاريخ الميلاد '
Me.CheckBox1.Checked = row("married") ' متزوج '
End If
End Sub
''' <summary>GetDataRow جلب بيانات سجل واحد</summary>'
''' <param name="connctionString">نص الاتصال بقاعدة البيانات</param>'
''' <param name="sqlString">جملة الاستعلام</param>'
''' <returns>DataRow تعيد سطر بيانات</returns>'
Public Function GetDataRow(ByVal connctionString As String, _
ByVal sqlString As String) As DataRow
Using da As New OleDbDataAdapter(sqlString, connctionString)
Using dt As New DataTable
If da.Fill(dt) > 0 Then Return dt.Rows(0)
End Using
End Using
End Function
''' <summary>ComboBox_Fill تعبئة صندوق السرد</summary>'
''' <param name="comboBox">المستهدف ComboBox تحديد مربع السرد </param>'
''' <param name="connctionString">نص الاتصال بقاعدة البيانات</param>'
''' <param name="tableName">إسم الجدول</param>'
''' <param name="displayMember">حقل العرض</param>'
''' <param name="valueMember">حقل القيمة</param>'
Public Sub ComboBox_Fill(ByVal comboBox As ComboBox, _
ByVal connctionString As String, ByVal tableName As String, _
ByVal displayMember As String, ByVal valueMember As String)
Dim sqlString As String = _
" SELECT [" & displayMember & "], [" & valueMember & "] " & _
" FROM [" & tableName & "]"
Using da As New OleDbDataAdapter(sqlString, connctionString)
Dim dt As New DataTable
da.Fill(dt)
comboBox.DataSource = dt
comboBox.DisplayMember = displayMember.Trim
comboBox.ValueMember = valueMember.Trim
comboBox.SelectedIndex = -1
End Using
End Sub
End Class
نسيت موضوع "ويفظل مع تحديث مستمر يعني كلما اضيف يقرا الاسم الجديد مايحتاج اطلع من البرنامج وارد اشغله"
فقط استدعي الدالة ComboBox_Fill بنفس الطريقة بعد الاضافة

