السلام عليكم ورحمة الله وبركاته
الكثير احيانا يحب يعمل تعدد صفحات ويقسم نتائجه على اكثر من صفحة بدون الاستعانه بالجريد فيو يعني ببساطه بواسطة كود عادي بدون استخدام اي ادوات جاهزه وعرض النتائج بكود 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)
اتمنى يكون الشرح وااااااضح واي استفسار اقدر اجاوب عليه ان شاء الله بجاوب 
في امان الله وحفظة