منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيفية فلترة ليست فيو vb net Multiple Column Filter listview
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

اريد افكار او طرق او كود يعمل فلترة لعناصر ليست فيو فى اكتر من عمود

بمعنى نفترض ان لدى ليست فيو تملك

الاسم - السن - الوظيفة - المرتب

كيف يتم عمل فلترة فى الاسم والراتب معا ؟

انا اقدر اعملها بشروط if

ولكن ستكون عملية الفلترة بطيئة جدا وليست جيدة على ما اعتقد خصوصا ان المشروع كبير وايضا عناصر الليست فيو سوف تكون كثيرة

بانتظار ابداعتكم
للرفع للرفع للرفع للرفع
للرفع للرفع للرفع للرفع
السلام عليكم

يمكن استغلال البحث في مصدر البيانات الذي قمت بتعبئة الليست فيو منه، والبحث فيه بشكل أسرع من قراءة خلايا الليست فيو.

وعموما هذا طريقة البحث في الليست فيو ويعيد مصفوفة من مجموعة أسطر،
البحث في العمود الأول نصا (الاسم مثلا) والعمود الرابع رقما (الراتب مثلا)
كود :
Dim itms() As ListViewItem =
    Me.ListView1.Items.Cast(Of ListViewItem).
    Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
              And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).ToArray

وهذا الكود ليعيد سطر واحد فقط
كود :
Dim itm As ListViewItem =
    Me.ListView1.Items.Cast(Of ListViewItem).
    Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
              And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).FirstOrDefault
(23-01-17, 02:12 AM)مساعدة كتب : [ -> ]السلام عليكم

يمكن استغلال البحث في مصدر البيانات الذي قمت بتعبئة الليست فيو منه، والبحث فيه بشكل أسرع من قراءة خلايا الليست فيو.

وعموما هذا طريقة البحث في الليست فيو ويعيد مصفوفة من مجموعة أسطر،
البحث في العمود الأول نصا (الاسم مثلا) والعمود الرابع رقما (الراتب مثلا)
كود :
Dim itms() As ListViewItem =
   Me.ListView1.Items.Cast(Of ListViewItem).
   Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
             And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).ToArray

وهذا الكود ليعيد سطر واحد فقط
كود :
Dim itm As ListViewItem =
   Me.ListView1.Items.Cast(Of ListViewItem).
   Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
             And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).FirstOrDefault
شكرا لك اخى بارك الله فيك

ولكن كيف الاستخدام ليتم اظهار العناصر المطابقة للبحث فى الليست فيو واخفاء باقى العناصر

وكيف الغى هذا البحث لكى يظهر كل العناصر كما كانت؟
أخبرتك سابقاً أن إجراء البحث سيسهل العملية وكثيراً ويسرعها في حالة البيانات الكثيرة.

في الوضع السابق يجب الاحتفاظ بالاسطر قبل إجراء البحث، وستم البحث على الاسطر المحتفظ بها

هنا يتم إنشاء متغير للإحتفاط بالاسطر الأصلية
كود :
Private ListView1Items() As ListViewItem

هنا كيفية تعبئة المتغير السابق بالأسطر الأصلية
كود :
ListView1Items = Me.ListView1.Items.Cast(Of ListViewItem).Select(Function(x) x).ToArray

هنا عملية البحث كما ذكرتها في مشاركتي السابقة مع عدم ظهور باقي العناصر
كود :
Dim itms() As ListViewItem = ListView1Items.
    Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
              And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).ToArray

Me.ListView1.Items.Clear()
Me.ListView1.Items.AddRange(itms)

هنا إعادة العناصر الأصلية للأداة
كود :
Me.ListView1.Items.Clear()
Me.ListView1.Items.AddRange(ListView1Items)


والوضع مختلف وأسهل في حال التعامل مع مصدر البيانات التي تمت تعبئة أداة الليست فيو منه.


في حالة وجود سؤال آخر الرجاء وضع مشروعك ليتم إيجاد الحل المناسب.
(23-01-17, 10:54 AM)مساعدة كتب : [ -> ]أخبرتك سابقاً أن إجراء البحث سيسهل العملية وكثيراً ويسرعها في حالة البيانات الكثيرة.

في الوضع السابق يجب الاحتفاظ بالاسطر قبل إجراء البحث، وستم البحث على الاسطر المحتفظ بها

هنا يتم إنشاء متغير للإحتفاط بالاسطر الأصلية
كود :
Private ListView1Items() As ListViewItem

هنا كيفية تعبئة المتغير السابق بالأسطر الأصلية
كود :
ListView1Items = Me.ListView1.Items.Cast(Of ListViewItem).Select(Function(x) x).ToArray

هنا عملية البحث كما ذكرتها في مشاركتي السابقة مع عدم ظهور باقي العناصر
كود :
Dim itms() As ListViewItem = ListView1Items.
   Where(Function(i) i.SubItems(0).Text.Equals(TextBox1.Text) _
             And Val(i.SubItems(3).Text).Equals(Val(TextBox2.Text))).ToArray

Me.ListView1.Items.Clear()
Me.ListView1.Items.AddRange(itms)

هنا إعادة العناصر الأصلية للأداة
كود :
Me.ListView1.Items.Clear()
Me.ListView1.Items.AddRange(ListView1Items)


والوضع مختلف وأسهل في حال التعامل مع مصدر البيانات التي تمت تعبئة أداة الليست فيو منه.


في حالة وجود سؤال آخر الرجاء وضع مشروعك ليتم إيجاد الحل المناسب.

اقسم بالله العظيم انك شخص مبدع

وتقريبا انت الشخص الوحيد الى فهمت ما اريد بالظبط

للعلم انى سئلت فى اكتر من منتدى اخر ولم يفهم قصدى اى شخص رغم انى وضحت لهم اكتر من هذا الموضوع ولكن دون جدوى

ولم يفهم قصدى سواك

+ انى ملاحظ مساعدتك البرئية فى كامل المنتدى ولكامل الاعضاء دون اى مقابل ولوجه الله فقط

اهنئك اخى على ذلك وربنا يذيدك من علمه

وباذن الله قريبا اشوفك من اداريين المنتدى


بارك الله فيك
بارك الله فيك، والحمد لله رب العالمين،
لا أريد أي شيء سواء من المنتدى أو الأعضاء،
فإني محتسب الأجر عند الله تعالى فقط صدقة عن والدي وعن نفسي.
ايه افضل كود يتحقق ان العمود فيه قيمة وانه مش فاضى؟

مثلا فى عمود رقم 7

ازاى اتحقق ان الصف رقم 1 فى العمود رقم 7 فيه قيمة وليس فارغ؟
تفضل الكود
كود :
' Items الصف
' SubItems العمود
' الصف والعمود يبدأ بالرقم صفر
' يعني العمود الاول يكون العمود رقم صفر والعمود الثاني يكون العمود رقم واحد وهكذا في الصف

Dim hasValue As Boolean = ListView1.Items(1).SubItems(7).Text.Trim <> ""
هنا سيحتوي hasValue إما True وتعني فارغ أو False وتعني ليس فارغ
الصفحات : 1 2