![]() |
|
[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=36296) |
فلترة الداتاجريد فيو بشرط - محمد اسماعيل - 03-09-20 السلام عليكم ورحمة الله وبركاتة لدي DataGridView مكونة من 4 أعمدة فقط. العمود الأول هو اسم المنتج العمود الثاني الخصم العمود الثالث هو السعر العمود الرابع هو اسم الشركة. تأتي هذه البيانات من تجميع أكثر من ملف Excel. وقمت بهذه الخطوة مطلوب: - استخراج أكبر 3 خصومات لكل منتج حيث يتشابه اسم المنتج والسعر مع نفس المنتج والسعر لشركة أخرى. -إذا كان هناك خصمان فقط ، فسيتم تحديدهما تلقائيًا . إذا كانت هناك خصم واحدة ، يتم اختيارها مباشرة. وحذف جميع البيانات التي لا تنطبق على الشروط 1-2 بحيث يتبقي فقط بالداتاجريد فيو المطلوب فقط صورة للبيانات قبل المطلوب [attachment=25573] صورة للبيانات بعد المطلوب [attachment=25574] ملف العمل بالمرفقات RE: فلترة الداتاجريد فيو بشرط - Anas Mahmoud - 04-09-20 عن طريق LINQ : كود : DataGridView1.Columns.Clear()الكود يعمل تماما 100% ولكن هناك شيء غامض بالنسبة لي ، احتجت لمسح كل الاعمدة من الجريد فيو لكي يعمل الكود ، والا يظهر لي خلايا فارغة لا اعلم السبب بصراحة يمكنك البدأ من هنا بطريقتك RE: فلترة الداتاجريد فيو بشرط - محمد اسماعيل - 04-09-20 (04-09-20, 02:26 AM)Anas Mahmoud كتب : عن طريق LINQ : الف شكر علي المساعدة في البداية. في حاجة بسيطة بالكود الي وضعتة اختار اصغر خصم مش اكبر خصم . انا صراحة مش فاهم الية عمل الدالة . ولا حضرتك عدلت قيمة الخصم بالنتيجة المفروض الخصم بنفس قيمتة النتيجة المطلوبة النتيجة بعد كود حضرتك [attachment=25578] RE: فلترة الداتاجريد فيو بشرط - Anas Mahmoud - 04-09-20 اعتذر اخي الكريم منك ، كل ما مطلوب تغييره هو الدالة OrderByDescending بدلا من OrderBy للترتيب تنازلي بلا من تصاعدي كود : DataGridView1.Columns.Clear()جربتها وعملت كما تريد وشرحها بسيط : AsEnumerable : لتحويل الداتا تابل الى قابل للعد ( List مثلا ) لنتمكن من استخدام Linq عليها Skip(1) : تخطي اول عنصر ، فيه اسماء الاعمدة من اكسيل GroupBy(Function(x) x(0)) : تجميع العناصر الى مجموعات حسب اول عمود ( اسم الصنف ) ، يستخدم اجراء لمدا لاعادة عناصر العمود الاول SelectMany : نخبر Linq ان يفعل ما نريد بكل مجموعة ومن ثم يقوم بتجميع الناتج في List واحدة ، وما نقوم بفعله هو : OrderByDescending(Function(y) y(1)) : ترتيب عناصر كل مجموعة تنازليا حسب عناصر العمود الثاني Take(3) اخذ اول 3 عناصر او اقل من كل مجموعة CopyToDataTable : يحفظ الناتج الى داتا تيبل جديد [attachment=25580] انصحك بالتعمق في LINQ فهيا الحل في معظم الامور اذا كنت تتعامل مع البيانات كثيرا ، مايتطلب الكثير من الاسطر لعمله يكفي سطر واحد من هذه التقنيه لفعل نفس الشيء RE: فلترة الداتاجريد فيو بشرط - محمد اسماعيل - 04-09-20 (04-09-20, 10:41 PM)Anas Mahmoud كتب : اعتذر اخي الكريم منك ، كل ما مطلوب تغييره هو الدالة OrderByDescending بدلا من OrderBy للترتيب تنازلي بلا من تصاعدي الف شكر علي سرعة الرد استاذ انس والشرح في مشكلة بسيطة بالكود لماذا ظهر هاذان الصفان المفروض ميظهروش لانهم خارج المنتج بمعني المنتج والسعر لايتساويان مع المنتج والسعر اتمني مكنش بتقل عليك [attachment=25581] RE: فلترة الداتاجريد فيو بشرط - L35 - 05-09-20 الشروط غير واضحة بالمنطق الأخير أن السطر قبل الأخير يجب عدم ظهوره PRODC 20 لكن عدم تحديدك لهذا السطر أصبحت الشروط غير مفهومة هل عدم تكرار F1+F2 هو المطلوب أم ماذا؟ RE: فلترة الداتاجريد فيو بشرط - Anas Mahmoud - 05-09-20 كود : DataGridView1.DataSource = dt.RE: فلترة الداتاجريد فيو بشرط - محمد اسماعيل - 05-09-20 (05-09-20, 11:03 AM)Anas Mahmoud كتب : جزاك الله خيرا عما قدمت بالنسبة لموضوع الاعمدة والصفوف الحل كان كدا قلت اضع الموضوع ربما احد الاخوة يحتاج الكود كود : DataGridView1.Rows.Clear() |