25 | Filter and Search Students List based on Student Name in DataGridView - VB.NET & SQL Server

 شرح الكود:

يقوم هذا الكود بتحديث DataGridView بناءً على النص المدخل في txt_find_name للبحث عن الطلاب الذين يحتوي اسمهم على النص المدخل.

١. الحدث TextChanged:


Private Sub txt_find_name_TextChanged(sender As Object, e As EventArgs) Handles

txt_find_name.TextChanged


  • الحدث: هذا الحدث يُنفَّذ عندما يتم تغيير النص داخل txt_find_name. الكود داخل هذا الحدث يتعامل مع تحديثات النص أثناء الكتابة.

٢. التحقق إذا كان النص فارغًا:


If txt_find_name.Text = Nothing Then

            dgv_students.Columns.Clear()

            dgv_students.DataSource = Nothing

            load_st_info_to_dgv()

            dgv_students_format()

  • إذا كان النص المدخل فارغًا (أي لا شيء مكتوب)، يتم:
    • مسح الأعمدة الموجودة في DataGridView.
    • تعيين DataSource إلى Nothing.
    • تحميل البيانات الأصلية للطلاب مرة أخرى باستخدام load_st_info_to_dgv() و dgv_students_format() لإعداد التنسيق.

٣. إذا كان النص غير فارغ:


Else 

   Dim con As New SqlConnection(conString)

   Dim dt As New DataTable

   dt.Clear()

   dgv_students.Columns.Clear()


  • إذا كان النص يحتوي على قيمة، يتم:
    • إنشاء اتصال بقاعدة البيانات باستخدام conString.
    • إنشاء DataTable جديد وتصفيره.
    • مسح الأعمدة في DataGridView باستخدام dgv_students.Columns.Clear().

٤. إعداد استعلام البحث:


Using cmd As New SqlCommand("SELECT ID, st_name, stage, stage_group, registration_date, discount, discount_type, study_fee,  study_fee_after_discount, notes from View_st_info WHERE st_name LIKE N'%" & (txt_find_name.Text) & "%' order by stage_id", con)

                cmd.CommandType = CommandType.Text

                cmd.CommandTimeout = 420

                con.Open()

                dt.Load(cmd.ExecuteReader())


  • يتم إعداد استعلام SQL للبحث عن الطلاب الذين تحتوي أسماؤهم على النص المدخل في txt_find_name باستخدام LIKE.
  • بعد تنفيذ الاستعلام عبر ExecuteReader()، يتم تحميل النتائج في DataTable.

٥. التحقق من وجود نتائج:


If dt.Rows.Count <> 0 Then

   dgv_students.DataSource = dt    

  • إذا كانت هناك بيانات في DataTable (أي إذا كانت هناك نتائج تطابق النص المدخل في البحث)، يتم:
    • تعيين DataGridView كمصدر بيانات للـ DataTable

٦. إضافة الأزرار:


Dim clmn_profile As New DataGridViewButtonColumn

clmn_profile.Name = "profile"

 clmn_profile.Text = "🙍"

clmn_profile.FlatStyle = FlatStyle.Flat

clmn_profile.UseColumnTextForButtonValue = True

dgv_students.Columns.Add(clmn_profile)

 

Dim clmn_edit As New DataGridViewButtonColumn

clmn_edit.Name = "edit"

clmn_edit.Text = "📝"

clmn_edit.FlatStyle = FlatStyle.Flat

clmn_edit.UseColumnTextForButtonValue = True

dgv_students.Columns.Add(clmn_edit)


Dim clmn_delete As New DataGridViewButtonColumn

clmn_delete.Name = "delete"

clmn_delete.Text = ""

clmn_delete.FlatStyle = FlatStyle.Flat

clmn_delete.UseColumnTextForButtonValue = True

dgv_students.Columns.Add(clmn_delete)

 

Dim clmn_delete1 As New DataGridViewButtonColumn

clmn_delete1.Name = "delete1"

clmn_delete1.Text = ""

clmn_delete1.FlatStyle = FlatStyle.Flat

clmn_delete1.UseColumnTextForButtonValue = True

dgv_students.Columns.Add(clmn_delete1)

dgv_students_format()

con.Close(

  • يتم إضافة أربعة أزرار من نوع DataGridViewButtonColumn:
    • "profile": لعرض ملف الطالب.
    • "edit": للتعديل على بيانات الطالب.
    • "delete" و "delete1": للحذف.

٧. تنسيق الجدول:


dgv_students_format()

con.Close()      

  • يتم تنسيق DataGridView باستخدام dgv_students_format() بعد إضافة الأزرار.
  • يتم إغلاق الاتصال بقاعدة البيانات باستخدام con.Close()


٨. إذا لم توجد بيانات:


dgv_students.Columns.Clear()

dgv_students.DataSource = Nothing

  • إذا كانت نتائج الاستعلام فارغة (أي لا توجد سجلات تطابق النص المدخل في البحث)، يتم مسح الأعمدة في DataGridView وإزالة DataSource.

٩. إغلاق الاتصال:


con.Close()

  • بعد الانتهاء من الاستعلام والمعالجة، يتم إغلاق الاتصال بقاعدة البيانات باستخدام con.Close().

الخلاصة:

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

الكود داخل حدث txt_find_name_TextChanged

Private Sub txt_find_name_TextChanged(sender As Object, e As EventArgs) Handles txt_find_name.TextChanged

 

        If txt_find_name.Text = Nothing Then

            dgv_students.Columns.Clear()

            dgv_students.DataSource = Nothing

            load_st_info_to_dgv()

            dgv_students_format()

        Else

 

            Dim con As New SqlConnection(conString)

            Dim dt As New DataTable

            dt.Clear()

            dgv_students.Columns.Clear()

 

Using cmd As New SqlCommand("SELECT ID, st_name, stage, stage_group, registration_date, discount, discount_type, study_fee,  study_fee_after_discount, notes from View_st_info WHERE st_name LIKE N'%" & (txt_find_name.Text) & "%' order by stage_id", con)

                cmd.CommandType = CommandType.Text

                cmd.CommandTimeout = 420

                con.Open()

                dt.Load(cmd.ExecuteReader())

                If dt.Rows.Count <> 0 Then

                    dgv_students.DataSource = dt

 

                    Dim clmn_profile As New DataGridViewButtonColumn

                    clmn_profile.Name = "profile"

                    clmn_profile.Text = "🙍"

                    clmn_profile.FlatStyle = FlatStyle.Flat

                    clmn_profile.UseColumnTextForButtonValue = True

                    dgv_students.Columns.Add(clmn_profile)

 

                    Dim clmn_edit As New DataGridViewButtonColumn

                    clmn_edit.Name = "edit"

                    clmn_edit.Text = "📝"

                    clmn_edit.FlatStyle = FlatStyle.Flat

                    clmn_edit.UseColumnTextForButtonValue = True

                    dgv_students.Columns.Add(clmn_edit)

 

                    Dim clmn_delete As New DataGridViewButtonColumn

                    clmn_delete.Name = "delete"

                    clmn_delete.Text = ""

                    clmn_delete.FlatStyle = FlatStyle.Flat

                    clmn_delete.UseColumnTextForButtonValue = True

                    dgv_students.Columns.Add(clmn_delete)

 

                    Dim clmn_delete1 As New DataGridViewButtonColumn

                    clmn_delete1.Name = "delete1"

                    clmn_delete1.Text = ""

                    clmn_delete1.FlatStyle = FlatStyle.Flat

                    clmn_delete1.UseColumnTextForButtonValue = True

                    dgv_students.Columns.Add(clmn_delete1)

                    dgv_students_format()

                    con.Close()

                Else

                    dgv_students.Columns.Clear()

                    dgv_students.DataSource = Nothing

                End If

                con.Close()

            End Using

 

        End If

    End Sub

 

إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!

يمكنكم متابعة الدرس عن طريق اليوتيوب







 

تعليقات

المشاركات الشائعة من هذه المدونة

7 | Display column's stages from the database into ComboBox's Stage - VB.NET & SQL Server

26 | Filter Students List based on students' stage and Group in DataGridView - VB.NET & SQL Server

8 | Get selected Stage and Group IDs from their ComboBoxes - VB.NET & SQL Server