تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] فلترة الداتاجريد فيو بشرط
#5
(04-09-20, 10:41 PM)Anas Mahmoud كتب : اعتذر اخي الكريم منك ، كل ما مطلوب تغييره هو الدالة OrderByDescending بدلا من OrderBy للترتيب تنازلي بلا من تصاعدي

كود :
       DataGridView1.Columns.Clear()

       DataGridView1.DataSource = dt.
           AsEnumerable.
           Skip(1).
           GroupBy(Function(x) x(0)).
           SelectMany(Function(x) x.OrderByDescending(Function(y) y(1)).Take(3)).
           CopyToDataTable

جربتها وعملت كما تريد 

وشرحها بسيط :

AsEnumerable : لتحويل الداتا تابل الى قابل للعد ( List مثلا ) لنتمكن من استخدام Linq عليها

Skip(1) : تخطي اول عنصر ، فيه اسماء الاعمدة من اكسيل

GroupBy(Function(x) x(0)) : تجميع العناصر الى مجموعات حسب اول عمود ( اسم الصنف ) ، يستخدم اجراء لمدا لاعادة عناصر العمود الاول

SelectMany : نخبر Linq ان يفعل ما نريد بكل مجموعة ومن ثم يقوم بتجميع الناتج في List واحدة ، وما نقوم بفعله هو :
    OrderByDescending(Function(y) y(1)) : ترتيب عناصر كل مجموعة تنازليا حسب عناصر العمود الثاني 
    Take(3) اخذ اول 3 عناصر او اقل من كل مجموعة

CopyToDataTable : يحفظ الناتج الى داتا تيبل جديد 



انصحك بالتعمق في LINQ فهيا الحل في معظم الامور اذا كنت تتعامل مع البيانات كثيرا ، مايتطلب الكثير من الاسطر لعمله يكفي سطر واحد من هذه التقنيه لفعل نفس الشيء

الف شكر علي سرعة الرد استاذ انس والشرح 

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

     
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
RE: فلترة الداتاجريد فيو بشرط - بواسطة محمد اسماعيل - 04-09-20, 11:05 PM
RE: فلترة الداتاجريد فيو بشرط - بواسطة L35 - 05-09-20, 01:24 AM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم