السلام عليكم ورحمة الله
ملاحظة وسلوك غير معهود مع ادوات لغات البرمجة وهو عندما تقوم بتعبئة الـ DataSet بالبيانات وتربطها بالـ GrideControl تم تقوم بعرضها تعرض مثلا 200 سجل الموجودة بقاعدة البيانات
بعدها اذا قمت بفلترة البيانات عن طريق الاداة GrideControl ومن الـ 200 اصبحت تعرض لنقل 50 فقط
الان اذا قمت بربط التقرير بمصدر البيانات فانه سوف يعرض الـ 200 سجل مما يوحي ان الاداة GrideControl لا تقوم حقيقة بفلترة البيانات وانما تقوم فقط باخفاء البيانات
هل هذا فعلا ما يحدث ام انا مخطئ
وهل هناك طريقة لاجبارها على فلترة البيانات حتى في الـ DataSet
وشكرا لكم
شكرا
الفلترة تتم على البيانات التي بالذاكرة وفي بيئات برمجة اخرى تتم على البيانات التي يتم جلبها من قاعدة البيانات
يعني يتم استبدال البيانات القديمة ببيانات جديدة اخرى
على العموم انا اعرف هذا المثال واستخدمه ولكن تواجهني مشكلة
اولا البيانات التي عندي (بالداتاسيت) احتاج لها الى بيانات فرعية من جدول اخر
يعني لنفرض ان البيانات التي فيها للموظفين وهنا قبل عرضها في التقرير احتاج الى اضافة بيانات اخرى مثل الصورة من جدول الصور والمستندات الخاصة بالموظف والاجازات وما الى ذلك
اين المشكلة ....؟
المشكلة سوف اعمل Loop لكل هذه الجداول واضيفها في الـ (داتاسيت) الحالية تم اقوم بعرضها
هل واجهتكم مشكلة كهذه وما الحل الأفضل من هذا
شكرا و الموضوع بسيط لا يحتاج لمشروع وهذا كل الكود
كود :
Dim ds As New DataSet
Dim dt As DataTable = DataSet1.Tables(0).Clone()
Dim SERIAL_NO As Integer
Dim languages_table As New DataTable
Dim QUALIFICATION_TABLE As New DataTable
Dim REFRESH_TABLE As New DataTable
Dim PUNISHMENT_TABLE As New DataTable
Dim SIGN_TABLE As New DataTable
For i As Integer = 0 To GridView1.DataRowCount - 1
dt.ImportRow(GridView1.GetDataRow(i))
SERIAL_NO = Convert.ToInt32(GridView1.GetDataRow(i).Item("SERIAL_NO"))
da.SelectCommand.Parameters.Clear()
da.SelectCommand.Parameters.Add("@SERIAL_NO", FbDbType.Integer).Value = SERIAL_NO
Try
da.Fill(languages_table)
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
da2.SelectCommand.Parameters.Clear()
da2.SelectCommand.Parameters.Add("@SERIAL_NO", FbDbType.Integer).Value = SERIAL_NO
Try
da2.Fill(QUALIFICATION_TABLE)
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
da3.SelectCommand.Parameters.Clear()
da3.SelectCommand.Parameters.Add("@SERIAL_NO", FbDbType.Integer).Value = SERIAL_NO
Try
da3.Fill(REFRESH_TABLE)
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
da4.SelectCommand.Parameters.Clear()
da4.SelectCommand.Parameters.Add("@SERIAL_NO", FbDbType.Integer).Value = SERIAL_NO
Try
da4.Fill(PUNISHMENT_TABLE)
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
Next
ds.Tables.Add(dt)
ds.Tables.Add(languages_table)
ds.Tables.Add(QUALIFICATION_TABLE)
ds.Tables.Add(REFRESH_TABLE)
ds.Tables.Add(PUNISHMENT_TABLE)
ds.Tables.Add(SIGN_TABLE)
ds.Relations.Clear()
ds.Relations.Add("Relation1", dt.Columns("SERIAL_NO"), languages_table.Columns("SERIAL_NO"))
ds.Relations.Add("Relation2", dt.Columns("SERIAL_NO"), QUALIFICATION_TABLE.Columns("SERIAL_NO"))
ds.Relations.Add("Relation3", dt.Columns("SERIAL_NO"), REFRESH_TABLE.Columns("SERIAL_NO"))
ds.Relations.Add("Relation4", dt.Columns("SERIAL_NO"), PUNISHMENT_TABLE.Columns("SERIAL_NO"))
ds.Relations.Add("Relation5", dt.Columns("SERIAL_NO"), SIGN_TABLE.Columns("SERIAL_NO"))
ولكن الطريقة لا تعجبني مع انها تعمل اشعر انها ليست انسب شئ