النتائج 1 إلى 5 من 5

الموضوع: تقســـــيم النتــــائج على عـدد من الصفـحات

  1. #1

    تاريخ التسجيل
    Jun 2006
    المشاركات
    1,370

    تقســـــيم النتــــائج على عـدد من الصفـحات



    السلام عليكم ورحمة الله وبركاته

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

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


    في البداية سوف نفترض اننا نريد اعادة 10 نتائج في كل صفحة

    نقوم بتعريف متغير من نوع انتيجر ونضع فيه العدد 10
    وانا هنا استخدم المتغير لان ممكن انت تجيب عدد النتائج من قاعدة البيانات فيكون معك سهولة التغيير فيما بعد من رقم 10 لاي رقم ثاني

    كود:
    Dim RequestNumberInOnePageV As Integer = 8
    الان سوف نستقبل رقم الصفحة المرسل عن طريق الرابط حيث اننا سوف نقوم بارسال رقم الصفحة التي يطلب العميل الانتقال لها مع الرابط

    كود:
    Dim PnIdV As Integer = Request.QueryString("pid")
    في حالة كان المتغير الذي اسندنا له رقم الصفحة يساوي صفر فهذا يعني ان المستخدم قد دخل الصفحة اول مرة ولم يتم استقبال اي رقم في المتغير فنسند له الرقم 1 وهو الصفحة الاولى

    كود:
            If PnIdV = 0 Then
                PnIdV = 1
            End If

    نقوم بجلب جميع المعلومات التي نريدها من قاعدة البيانات ونفرغها في داخل DataSet او بالطريقة التي تريدها انا احب ان استخدم الدانا ست ولنفرض ان اسمها هو dsMatch
    وهي الان تحتوي على كل السجلات الي عادت من قاعدة البيانات بعد تنفيذ جملة ال sql

    الان نريد معرفة عدد الصفحات التي سوف يتم تقسيم النتائج عليها وهو سيكون ناتج قسمة العدد الكلي للسجلات في الداتا ست على عدد السجلات المطلوب عرضها في الصفحة الاولى (مع وجدود بعض الاستثنائات التي سوف نتطرق لها)

    نخزن عدد السجلات في الداتا ست داخل متغير

    كود:
    Dim RecordsNumberV As Integer = dsMatch.Tables(0).Rows.Count
    الاستثناء الوحيد الذي قد يسبب لنا مشاكل هو في حالة كان عدد السجلات الباقيه لعرضها اقل من عدد السجلات المطلوب عرضها لاننا في هذه الحالة اذا قسمنا عدد السجلات الكلي على عدد السجلات المطلوب عرضها سوف يكون العدد اقل من واحد وبعد تقريبه لاقرب عدد صحيح اصغر منه سوف يكون الناتج صفر بينما لو كان عدد السجلات اكبر مثلا مطلوب عرض 10 سجلات وعدد السجلات العائده في الداتا ست هو 12 فعند قسمة 12 على 10 سوف ينتج لدينا رقم واحد وكسر نقربه لاقرب عدد صحيح من الاسفل فيكون الناتج 1 نضيف له رقم 1 فيكون عدد الصفحات 2

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

    كود:
    'معرفة عدد الصفحات التي سوف يتم تفسيم النتائج عليها
            Dim RecordsNumberV As Integer = dsMatch.Tables(0).Rows.Count
            Dim PagesNumberV As Integer = 0
            If RecordsNumberV <= RequestNumberInOnePageV Then
                PagesNumberV = 1
            Else
                PagesNumberV = Math.Round(RecordsNumberV / RequestNumberInOnePageV) + 1
            End If
    
            'عدد الصفحات الذي سوف يتم تقسيم النتائج عليه
            Dim ALLPageNumber As Integer = PagesNumberV

    استثناء اخر

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

    كود:
    If PnIdV > PagesNumberV Then
                Response.Redirect("aggnews.aspx?pid=" & PagesNumberV)
                Exit Sub
            End If


    الان نقوم بوضع قائمة منسدله (دروب داون لست) ونفرغ فيها عدد الصفحات العائد لنا وعندما يختار المستخدم الصفحة التي يريدها منها تنقله لنفس صفحاتنا مع ارسال رقم الصفحة المطلوبة في المتغير

    كود:
    If Page.IsPostBack = False Then
                'افراغ عدد الصفحات في قائمة الصفحات
                Dim Ir As Integer = 0
                For Ir = PagesList.Items.Count - 1 To 0 Step -1
                    PagesList.Items.RemoveAt(Ir)
                Next
                Dim Il As Integer = 0
                For Il = 1 To PagesNumberV
                    PagesList.Items.Add(New ListItem("Page: " & Il, Il))
                Next
                PagesList.SelectedValue = PnIdV
            End If


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

    كود:
    'معرفة بداية ونهاية السجلات التي سيتم عرضها في هذه الصفحة
            Dim StartReV As Integer = RecordsNumberV - ((PnIdV * RequestNumberInOnePageV) - RequestNumberInOnePageV)
            Dim EndReV As Integer = 0
            If StartReV > RequestNumberInOnePageV Then
                EndReV = StartReV - RequestNumberInOnePageV
            Else
                EndReV = 0
            End If

    مع العلم ان StartReV هذه متغير بداية السجلات
    و EndReV هذا متغير نهاية السجلات

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

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



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

    كود:
    Dim Ip As Integer = 0
    For Ip = StartReV - 1 To EndReV Step -1
    هنا السجلات المعروضه بالصفحة
    Next


    بقي الان ان نقوم بنقل المستخدم للصفحة المطلوبة في حالة اختار رقم الصفحة من القائمة المنسدلة وهذا هو كودها

    كود:
    Dim PageIdV As Long = PagesList.SelectedItem.Value
            Response.Redirect("aggnews.aspx?pid=" & PageIdV)


    اتمنى يكون الشرح وااااااضح واي استفسار اقدر اجاوب عليه ان شاء الله بجاوب



    في امان الله وحفظة





    __________________
    @_@


  2. #2
    عضو سوبر نشيط
    تاريخ التسجيل
    Mar 2000
    المشاركات
    762


    يعطيك العافيه اخوي احمد الطريقه موجوده ولكن شرحها بهالصوره مبدع

    ربي يوفقك





    __________________
    Eng.Fedail
    Computer and Electronics Engineer

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    373


    المشكلة ياغالى ان المبتدىء مش هيفهم حاجة

    وانا هنا استخدم المتغير لان ممكن انت تجيب عدد النتائج من قاعدة البيانات فيكون معك سهولة التغيير فيما بعد من رقم 10 لاي رقم ثاني
    وحطيت المتغير علطول
    طيب فهمنا نحط فين الكلام دة
    ونحفظ بأسم ايه
    ونعمل ايه






    __________________
    صبايا - عرب دى فى دى - forex doubler

    بريد + مسنجر back4@live.com

    جوال - 0562963540

  4. #4

    تاريخ التسجيل
    Jun 2006
    المشاركات
    1,370


    يعطيك العافيه اخوي احمد الطريقه موجوده ولكن شرحها بهالصوره مبدع

    ربي يوفقك
    مشكووور اخوي فراس على ردك ياليت تعطيني عنوان الشرح القديم الموجود ممكن نستفيد منه جميعا انا ماعرف تقصد انه شرح قديم لي انا ؟؟ ولا انه شرح موجود بالمنتدى لان فعلا ناسي وجوده ياليت تعطيني الرابط ان شاء الله نستفيد منه





    __________________
    @_@

  5. #5

    تاريخ التسجيل
    Jun 2006
    المشاركات
    1,370


    المشكلة ياغالى ان المبتدىء مش هيفهم حاجة


    وحطيت المتغير علطول
    طيب فهمنا نحط فين الكلام دة
    ونحفظ بأسم ايه
    ونعمل ايه
    هلا اخوي
    بخصوص الي سالت عنه هذا عدد النتائج الي رح يظهر في الصفحة الواحده

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





    __________________
    @_@





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض