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()
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()
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())
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
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(
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()
dgv_students_format()
con.Close()
- يتم تنسيق
DataGridView
باستخدامdgv_students_format()
بعد إضافة الأزرار.
- يتم إغلاق الاتصال بقاعدة البيانات باستخدام
con.Close()
٨. إذا لم
توجد بيانات:
dgv_students.Columns.Clear()
dgv_students.DataSource = Nothing
dgv_students.Columns.Clear()
dgv_students.DataSource = Nothing
- إذا كانت نتائج الاستعلام فارغة (أي لا توجد
سجلات تطابق النص المدخل في البحث)، يتم مسح الأعمدة في
DataGridView
وإزالةDataSource
.
٩. إغلاق
الاتصال:
con.Close()
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
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
إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!
تعليقات
إرسال تعليق