منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] تصفية داتا جريد - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] تصفية داتا جريد (/showthread.php?tid=18465)



تصفية داتا جريد - tifagreet - 17-12-16

عندي نموذج به داتا جريد و به حدث selection change يعمل الصورة جيدة و كذلك يوجد اداة تصفية الصفوف طبقا للتاريخ 
او الاسم او الوظيفة 
عند تشغيل اداوات التصفية لا يستجيب الحدث selection change 
ارجو الافادة


RE: تصفية داتا جريد - محمد كريّم - 18-12-16

الصف المحدد لا يتغير عند فرز الأعمدة
على سبيل المثال إذا كانت لديك dataGridView بها 4 صفوف Rows وقمت بتحديد الصف الثالث ثم ضغطت على رأس العمود column header لفرز الصفوف حسب قيمة خلايا هذا العمود
فإن الاختيار لن يتغير من الصف الثالث الذي اخترته على الرغم من أن بيانات الصف قد تغيرت
فالإختيار هنا يتم على رقم الصف في الأداة index وليس على محتوى خلايا الصف

لهذا عليك أولا أن تميز هذا الصف وتخزن قيمة خاصة به في متغير نصي قبل اتمام عملية الفرز

مثال اذا كانت عملية الفرز عندك تعتمد على الضغط على راس العمود:
كود :
void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
   if (e.RowIndex == -1)
   {
       selected = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
   }
}
هنا خزنت قمية الخلية الاولى من السطر المحدد في متغير selected - عليك اختيار قيمة لا تتكرر في باقي الصفوف مثل رقم متسلسل او اسم
لاحظ ان شرط التنفيذ هو ان يكون العمود المضغوط رقمه -1 وهو رقم خلية راس العمود

الان تحتاج الى استخدام حدث sorted الذي ينفذ بعد الفرز
بحيث ستغير الصف المحدد الى الصف الذي يطابق محتوى الخلية المحددة قيمة المتغير selected
وبعدها سينفذ تلقائيا حدث selection_changed

هذا رابط المصدر ولو انه مرتبط ب SortableBindingList
http://stackoverflow.com/questions/4819573/selected-rows-when-sorting-datagridview-in-winform-application


RE: تصفية داتا جريد - tifagreet - 18-12-16

(18-12-16, 01:56 AM)محمد كريّم كتب : الصف المحدد لا يتغير عند فرز الأعمدة
على سبيل المثال إذا كانت لديك dataGridView بها 4 صفوف Rows وقمت بتحديد الصف الثالث ثم ضغطت على رأس العمود column header لفرز الصفوف حسب قيمة خلايا هذا العمود
فإن الاختيار لن يتغير من الصف الثالث الذي اخترته على الرغم من أن بيانات الصف قد تغيرت
فالإختيار هنا يتم على رقم الصف في الأداة index وليس على محتوى خلايا الصف

لهذا عليك أولا أن تميز هذا الصف وتخزن قيمة خاصة به في متغير نصي قبل اتمام عملية الفرز

مثال اذا كانت عملية الفرز عندك تعتمد على الضغط على راس العمود:
كود :
void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
   if (e.RowIndex == -1)
   {
       selected = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
   }
}
هنا خزنت قمية الخلية الاولى من السطر المحدد في متغير selected - عليك اختيار قيمة لا تتكرر في باقي الصفوف مثل رقم متسلسل او اسم
لاحظ ان شرط التنفيذ هو ان يكون العمود المضغوط رقمه -1 وهو رقم خلية راس العمود

الان تحتاج الى استخدام حدث sorted الذي ينفذ بعد الفرز
بحيث ستغير الصف المحدد الى الصف الذي يطابق محتوى الخلية المحددة قيمة المتغير selected
وبعدها سينفذ تلقائيا حدث selection_changed

هذا رابط المصدر ولو انه مرتبط ب SortableBindingList
http://stackoverflow.com/questions/4819573/selected-rows-when-sorting-datagridview-in-winform-application

شكرا


RE: تصفية داتا جريد - رسول555 - 29-04-18

هذا موضوع قديم موجود في المنتدى ولكن لم استطيع تطبيقه على مشروعي
من خلال الكود المذكور علما انه الكود الذي استخدمه في البحث هو
كود :
   Private Sub TextBox9_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox9.TextChanged
       Dim ba As New BindingSource
       ba.DataSource = DataGridView1.DataSource
       ba.Filter = DataGridView1.Columns("الموضوع").DataPropertyName & " like '%" & TextBox9.Text & "%'"
       DataGridView1.DataSource = ba
   End Sub

و الكود المستخدم في التحديد هو
كود :
   Private Sub DataGridView1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
       Dim te As String = BindingContext(dt).Position
       TextBox1.Text = dt.Rows(te).Item("التاريخ")
       TextBox2.Text = dt.Rows(te).Item("الجهة المرسلة")
       TextBox3.Text = dt.Rows(te).Item("الجهة المستلمة")
       TextBox4.Text = dt.Rows(te).Item("رقم الكتاب")
       TextBox5.Text = dt.Rows(te).Item("تاريخ الكتاب")
       TextBox6.Text = dt.Rows(te).Item("الموضوع")
       TextBox7.Text = dt.Rows(te).Item("الملاحظات")
       TextBox8.Text = dt.Rows(te).Item("تسلسل الاضبارة")
   End Sub



RE: تصفية داتا جريد - سعود - 29-04-18

كود :
Dim te As String = BindingContext(dt).Position
الـPosition رقمي وليس نصي عرفه كـ Integer وليس String.


RE: تصفية داتا جريد - رسول555 - 29-04-18

شكرا لك اخي لكن هل من الممكن التعديل على الكودات المذكورة
مع الشكر الجزيل


RE: تصفية داتا جريد - سعود - 29-04-18

(29-04-18, 03:20 PM)رسول555 كتب : شكرا لك اخي لكن هل من الممكن التعديل على الكودات المذكورة
مع الشكر الجزيل

العفو ... لكن حسب الكود لم ار خطا سوى ما كتبته بمشاركتي  السابقة.

ملاحظة! 
            اذا ربطت كل الادوات بمصدر واحد لن تحتاج لاكواد الاسناد الموجودة بالكود.


RE: تصفية داتا جريد - رسول555 - 30-04-18

لم تحل المشكلة عندما اقوم بالتصفية يتوقف خاصية selection change


RE: تصفية داتا جريد - رسول555 - 01-05-18

(30-04-18, 01:55 AM)رسول555 كتب : لم تحل المشكلة عندما اقوم بالتصفية يتوقف خاصية selection change
 ؟؟؟؟؟؟؟؟؟؟؟؟؟؟