السلام عليكم ورحمةالله وبركاته ..
اردت ان اشارككم معلومة وافيد بها كل من يحتاج اليها ..
سأوضح لكم في هذا الدرس امكانية البحث وعرض العناصر الموجودة داخل الاداة ComboBox بصورة تلقائية بمجرد كتابة اول حرف او عند كتابة اي حرف من الحروف ..
اي انها ستكون شبيهه بالموجودة في محرك البحث جوجل ..
يعني عندما تكتب اول حرف فانه يعطيك المقترحات وفقا لما هو موجود عنده من بيانات .. وعندما تكتب الحرف الثاني فانه يقلل من الاحتمالات الكثيرة التي تظهر ويخصص لك البحث في اول حرفين .. وكلما تزيد من الحروف يعطيك مقترحات مخصصة اكثر ..
وهذا ما سنقوم ببرمجته الان .. في برنامج بسيط ..
ونستفيد من هذه الامكانية في برمجة برنامج نربط من خلاله الComboBox مع قاعدة بيانات معينة ونبحث فيها بكل سهولة ويسر .. وكذلك الالية تنفع مع اللغة العربية والانكليزية ..
لنبدأ ..
1- الان لنقم بفتح مشروع جديد ..
2- اول ما نحتاجه هو ربط المشروع مع قاعدة بيانات .. وهذه لن اتطرق لها الان لانها مشروحة سابقا وبكثرة ..
3- وصلنا الان الى مرحلة لدينا مشروع ومرتبط مع قاعدة بيانات تحتوي جداول ..
4- لنقم باضافة DataGride الخاصة بالجدول الى المشروع .. والتي هي مربوطة سابقا (( طبعا هنا انا برأي ان الربط يتم باستخدام المعالج )) لانها ستختصر الكثير من الوقت والجهد .
5- نضيف Combox على حسب ما نريد ان نربطها معه .. يعني اي عدد كان من الاداة ونربط كل واحدة مع عمود معين من الجدول المطلوب البحث فيه .
المثال المرفق بعد التصميم وربط قاعدة البيانات .. يكون على الشكل التالي ..
6- في الحدث Form_Load نكتب الكود التالي :
Dim tRow As DataRow, tTbl As DataTable
tTbl = DbDataSet.Tables.Item(0)
ComboBox1.Text = ""
ComboBox1.Items.Clear()
ComboBox1.BeginUpdate()
'
For Each tRow In tTbl.Rows
ComboBox1.Items.Add(tRow("NA").ToString)
Next
ComboBox1.EndUpdate()في الكود السابق .. عرفنا متغييرن الاول خاص بالصف والذي سنقوم بعملية Loop في ما بعد لغرض نقل محتويات العمود المطلوب البحث فيه الى الCombo .. ومتغير اخر tTbl وهو الخاص بالجدول ..
الاسطر بعدها واضحة ..
لنصل الان الى الدوارة loop والتي من خلالها نجد اننا قمنا باضافة كل محتويات الجدول NA الى الCombo الاول ..
وبعدها انهينا التحديث ..
7- الان لدينا الكود الخاص بالاداة Combo في الحدث TextChanged .. وهو كالتالي ::
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
Dim bIx As Integer, lEx As Boolean
Dim box As ComboBox = sender
Dim txt As String = box.Text
Dim pCr As Integer = box.SelectionStart
If pCr <> 0 Then
lEx = False
For bIx = 0 To box.Items.Count - 1
If UCase(Mid(box.Items(bIx), 1, pCr)) = _
UCase(Mid(txt, 1, pCr)) Then
box.Text = box.Items(bIx)
box.SelectionStart = pCr
lEx = True
Exit For
End If
Next
If Not lEx Then
box.Text = Mid(txt, 1, pCr - 1) + Mid(txt, pCr + 1)
box.SelectionStart = pCr - 1
End If
End If
End Subبعد ذلك .. نفذ البرنامج .. لنلاحظ ان الاداة تم ربطها بالجدول .. لدينا امكانية عرض الجدول كاملا .. ولو اردنا ان نبحث عن اي عنصر داخل الجدول .. يمكن ذلك بسهولة جدا بواسطة اول حرف فقط ..
المثال المصنوع الذي يوضح هذه الالية ... مرفق في الموضوع .. وهو يوضح رجال باب الحارة مع مهنتهم ..
لم اجد ما يفيد ..اردت التغيير في طرح الامثلة .. كل الامثلة حول الشركات والمبيعات والمخازن .. كرهتها لكثرتها .. ولقلة شركاتي ..
حمل المثال ::
تحياتي العطرة ..

