السلام عليكم ورحمة الله وبركاته
الكثير احيانا يحب يعمل تعدد صفحات ويقسم نتائجه على اكثر من صفحة بدون الاستعانه بالجريد فيو يعني ببساطه بواسطة كود عادي بدون استخدام اي ادوات جاهزه وعرض النتائج بكود html بتعدد صفحات
ان شاء الله ان هذه الطريقة تعجبكم وتفيدكم واهم شي تستخدموها
في البداية سوف نفترض اننا نريد اعادة 10 نتائج في كل صفحة
نقوم بتعريف متغير من نوع انتيجر ونضع فيه العدد 10
وانا هنا استخدم المتغير لان ممكن انت تجيب عدد النتائج من قاعدة البيانات فيكون معك سهولة التغيير فيما بعد من رقم 10 لاي رقم ثاني
الان سوف نستقبل رقم الصفحة المرسل عن طريق الرابط حيث اننا سوف نقوم بارسال رقم الصفحة التي يطلب العميل الانتقال لها مع الرابطكود:Dim RequestNumberInOnePageV As Integer = 8
في حالة كان المتغير الذي اسندنا له رقم الصفحة يساوي صفر فهذا يعني ان المستخدم قد دخل الصفحة اول مرة ولم يتم استقبال اي رقم في المتغير فنسند له الرقم 1 وهو الصفحة الاولىكود:Dim PnIdV As Integer = Request.QueryString("pid")
كود:If PnIdV = 0 Then PnIdV = 1 End If
نقوم بجلب جميع المعلومات التي نريدها من قاعدة البيانات ونفرغها في داخل DataSet او بالطريقة التي تريدها انا احب ان استخدم الدانا ست ولنفرض ان اسمها هو dsMatch
وهي الان تحتوي على كل السجلات الي عادت من قاعدة البيانات بعد تنفيذ جملة ال sql
الان نريد معرفة عدد الصفحات التي سوف يتم تقسيم النتائج عليها وهو سيكون ناتج قسمة العدد الكلي للسجلات في الداتا ست على عدد السجلات المطلوب عرضها في الصفحة الاولى (مع وجدود بعض الاستثنائات التي سوف نتطرق لها)
نخزن عدد السجلات في الداتا ست داخل متغير
الاستثناء الوحيد الذي قد يسبب لنا مشاكل هو في حالة كان عدد السجلات الباقيه لعرضها اقل من عدد السجلات المطلوب عرضها لاننا في هذه الحالة اذا قسمنا عدد السجلات الكلي على عدد السجلات المطلوب عرضها سوف يكون العدد اقل من واحد وبعد تقريبه لاقرب عدد صحيح اصغر منه سوف يكون الناتج صفر بينما لو كان عدد السجلات اكبر مثلا مطلوب عرض 10 سجلات وعدد السجلات العائده في الداتا ست هو 12 فعند قسمة 12 على 10 سوف ينتج لدينا رقم واحد وكسر نقربه لاقرب عدد صحيح من الاسفل فيكون الناتج 1 نضيف له رقم 1 فيكون عدد الصفحات 2كود:Dim RecordsNumberV As Integer = dsMatch.Tables(0).Rows.Count
ولكي نتدارك هذه المشكلة نقوم اولا بمقارنة عدد النتائج العائده في الداتا ست مع عدد النتائج المطلوبة في الصفحة الواحده فاذا كان عدد السجلات اقل من عدد النتائج المطلوب عرضها يكون عدد الصفحات واحد فقط بينما لو كان اكبر نقوم بحساب عدد الصفحات من ناتج قسمتهم
كود:'معرفة عدد الصفحات التي سوف يتم تفسيم النتائج عليها 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)
اتمنى يكون الشرح وااااااضح واي استفسار اقدر اجاوب عليه ان شاء الله بجاوب
في امان الله وحفظة




رد مع اقتباس

