وعليكم السلام ورحمة الله وبركاته
اولاً الموضوع المشار اليه يخص قسم VB.NET
بينما انت فتحت السؤال بقسم C#
فهنا عند الاجابة عليك اجب عن اى لغة
ثانياً على اى حال اخي الحبيب
الرد البسيط لحل هذه المشكلة هو ان تجعل البحث
عن طريق قاعدة البيانات لاعادة ارسال DT الى الداتا جريد
وليس من خلال عمل فلتر للداتا جريد نفسها
والسبب يرجع ان عملية فتح الملف يتم من خلال التعامل مع DT
وليس الداتا جريد التى تعرض البيانات
لاحظ هنا السطر التالى فى المشروع
كود :
' تحويل الكود المسجل بقاعدة البيانات الى ملف
Dim ff() As Byte = CType(dt.Rows(DgId)(3), Byte())
ستجد dt.Rows وليس dataGridView1
ثانياً قيمة DgId والتى يتم تعبئتها فى هذا الحدث
كود :
Private Sub dataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridView1.CellClick
' اعطاء المتغيير المعرف من نوع رقم قيمة رقم الصف
DgId = e.RowIndex
End Sub
ويتم عند الضغط على اى خلية لتحديد رقم سطر الخلية وارسالها
قبل اتمام الضغط على زر فتح الملف
فهنا عملية الفلتر فى الداتا جريد عند البحث
غير صحيحة تماماً لان الفلتر فى الداتا جريد سيعطى ان اجالى النتيجة البحث 4 بيانات مثلاً
بينما فى dt يوجد بها 12 بيان مثلاً
وعنا عند تحديد فتح رقم 2 قد تكون هنا مكنها فى dt رقم 8
فستجد ان 2 و 8 مختلف تماماً
طيب لاتمام البحث ماذا عليك ان تفعل
ستقوم بوضع الـ Sub التالى
كود :
Private Sub GetSearchData(myText As String)
' تفريغ DT
dt.Clear()
' جلب البيانات من قاعدة البيانات
cmd = New SqlCommand("select * from TB_File WHERE name='" & myText & "'", con)
Da = New SqlDataAdapter(cmd)
Da.Fill(dt)
' تعبئة الداتا جريد بالبيانات التى تم تعبئتها
dataGridView1.DataSource = dt
' تسمية الاعمدة فى الداتا جريد
dataGridView1.Columns(0).HeaderText = "ID"
dataGridView1.Columns(1).HeaderText = "File Name"
dataGridView1.Columns(2).HeaderText = "File Extension"
' اخفاء العمود الاخير تجنباً من ظهور رسالة اخطاء
' خصوصاً اذا كان الملف المرفق ليس صورة
dataGridView1.Columns(3).Visible = False
End Sub
لا تنسى التعديل على المسميات فى كود الاستعلام / البحث
الخاص بهذا الجزء
كود :
"select * from TB_File WHERE name='" & myText & "'"
الان بعد الانتهاء ستذهب الى حدث البحث
وتقوم بوضع السطر التالى مع تغيير TextBox1 الى ما لديك من مسمى
كود :
GetSearchData(textBox1.Text)
بكده ستجد انه يعمل معك تماماً وبدون مشكلة
طيب لو كنت عايز اعمل البحث بحيث عند مسح نص البحث من TextBox
ليعود نتائج كل ما فى الجدول مثل البداية
تعال على كود الاستعلام اللى اشرت عليه بالاعلى وهو
كود :
"select * from TB_File WHERE name='" & myText & "'"
واجعله بهذا الشكل
كود :
"select * from TB_File WHERE name LIKE '%" & myText & "%'"
بات الامر بسيط الان وواضح كيف يتم البحث
وعمل المشروع معك بصورة صحيحة بدون هذا الخطاء
قمت بشرح الكود بـ VB.NET
بسبب الرابط المشار اليه يخص هذا القسم
وفى انتظار توضيح ما لديك هو VB.NET ام C#
حتى يتم نقل الموضوع او وضع نفس الشرح ولكن بكود C#
تحياتى لك
وتمنياتى لك التوفيق