03-09-20, 02:36 AM
(آخر تعديل لهذه المشاركة : 03-09-20, 02:58 AM {2} بواسطة Anas Mahmoud.)
اخي الكريم انصحك ان تغير طريقة اضافة البيانات للداتا جريد مباشرة عن طريق DataGridView1.Rows.Add
انصحك بملئ DataTable اولا ومن ثم جعله DataSource للداتا جريد فيو ، ذلك يتيح لك الاستفادة من الخاصية Filter الخاصة بالداتا تابل كما موضح بالمشاركات السابقة
ومع ذلك اذا لم ترد تغيير ايا من كودك يجب عليك اختبار الصفوف يدويا واظهار واخفاء ما تريد حسب محتوى التكست بوكس
الرقم 0 يمثل العمود الاول غيره الى العمود الذي تريد التغيير له
الكود يقوم يدويا بالمرور على الصفوف واخفاء الغير مطابق للشرط وهو محتوى مربع النص
المصدر https://stackoverflow.com/a/48557623
لكي يكون الكود DRY ولا تكرر نفسك عرف الاجراء التالي عام للبرنامج كله ، في موديول مثلا
وعند الحاجة استدعيه في سطر واحد :
تحديث هام : جربتها لعدد كبير من الصفوف وتأخذ وقت طويل جدا لذا لا انصح بها اطلاقا ، بدلا من ذلك اضف البيانات الى داتا تابل اولا وبعد ذلك اسنده الى الخاصية Datasource
انصحك بملئ DataTable اولا ومن ثم جعله DataSource للداتا جريد فيو ، ذلك يتيح لك الاستفادة من الخاصية Filter الخاصة بالداتا تابل كما موضح بالمشاركات السابقة
ومع ذلك اذا لم ترد تغيير ايا من كودك يجب عليك اختبار الصفوف يدويا واظهار واخفاء ما تريد حسب محتوى التكست بوكس
الرقم 0 يمثل العمود الاول غيره الى العمود الذي تريد التغيير له
كود :
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim txt As TextBox = sender
For Each row As DataGridViewRow In DataGridView1.Rows
Dim cell = row.Cells(0)
If Not cell.Value Is Nothing Then
If cell.Value.ToString.Contains(txt.Text.Trim) Then
row.Visible = True
Else
row.Visible = False
End If
End If
Next
End Subالكود يقوم يدويا بالمرور على الصفوف واخفاء الغير مطابق للشرط وهو محتوى مربع النص
المصدر https://stackoverflow.com/a/48557623
لكي يكون الكود DRY ولا تكرر نفسك عرف الاجراء التالي عام للبرنامج كله ، في موديول مثلا
كود :
Sub Filter(Datagridview As DataGridView, index As Integer, Selector As Func(Of String, Boolean))
For Each row As DataGridViewRow In Datagridview.Rows
Dim cell = row.Cells(index)
If Not cell.Value Is Nothing Then
If Selector(cell.Value.ToString) Then
row.Visible = True
Else
row.Visible = False
End If
End If
Next
End Subوعند الحاجة استدعيه في سطر واحد :
كود :
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim txt As TextBox = sender
Filter(DataGridView1, 0, Function(x) x.Contains(txt.Text))
End Subتحديث هام : جربتها لعدد كبير من الصفوف وتأخذ وقت طويل جدا لذا لا انصح بها اطلاقا ، بدلا من ذلك اضف البيانات الى داتا تابل اولا وبعد ذلك اسنده الى الخاصية Datasource

