دوره آموزش جامع انتیتی فریم ورک Entity Framework صفحه بندی در گریدویو Paging
574 بار بازدید -
3 سال پیش
-
در این قسمت درباره پیج
در این قسمت درباره پیج بندی صفحات حرف میزنیم .زمانی که مثال 200 هزارتا رکورد داشته باشید لازم نیست که همه رو تو یک صفحه گریدویو نمایش بدید چون باعث سنگین شدن شدید برنامه میشه به همین دلیل گریدویو رو پیج بندی میکنیم و در هر صفحه تعدادی از رکورد ها رو نمایش میدیم مثلا در هر صفحه گرید ویو 51 تا رکورد رو نمایش میدیم ، 50 تا 50 تا یا 100 تا 100 تا .در اینجا تو جدول Student کلا ما 5 تا رکورد داریم که میخوایم این 5 تا رکورد رو پیج بندی کنیم.
بدین منظور ابتدا یه دکمه جدید واسه عوض کردن پیج های گریدویو اضافه میکنیم. یه متغییر سراسری به نام PageSize تعریف میکنیم و مقدار این متغییر رو برابر 1 در نظر میگیریم چون میخوایم تو هر صفحه گریدویو یک رکورد رو به ما نمایش بده. یه متغییر سراسری دیگه به نام PageIndex هم تعریف میکنیم و مقدارش رو برابر 0 میگیریم چون ایندکس پیج اولمون صفره. حالا تو ایونت کیلک دکمه ای که اضافه کردیم کدهای مورد نظر رو میزنیم ، میخواییم وقتی صفحات گریدویو رو ورق میزنیم وقتی به صفحه 5 رسید و دوباره ورق زدیم ، از صفحه 5 بچرخه و دوباره صفحه 1 بیاد.
1 Double Dpaging = context.Students.Counts() / (float) PageSize
2 Double D1= Dpaging - Math . Truncate (Dpaging)
3 if (D1>0)
4 Dpaging += 1
5 PageIndex = (PageIndex + 1) % (int) Dpaging
6 Var pageQuery = context.Students.orderBy (c => c .studentID) . skip (PageIndex * PageSize) . Take (PageSize)
توضیحات کد بالا : تو خط 1 میخوایم تعداد پیج هامون رو نسبت به رکورد هامون بدست بیاریم بنابراین تعداد رکوردها رو تقسیم بر PageSize مون میکنیم و درون متغییر Dpaging میریزیم ، اگه حاصل تقسیم عدد صحیح بود که هیچ اما اگر حاصل تقسیم عدد اعشاری بود ، این عدد اعشاری رو تو خط 2 با استفاده از تابع Math.Truncate ، قسمت صحیحش رو از قسمت اعشاریش جدا میکنیم و قسمت اعشاریش رو درون متغییر D1 میریزیم (عدد اعشاری منهای قسمت صحیح مساوی است با قسمت اعشاری >>>>> Dpaging - Math.Truncate(Dpaging))
حالا تو خط 3 شرط میذاریم که اگر (D1>0) بود به عبارت دیگه اگر قسمت اعشاری عددمون ، درون متغییر D1 بود یعنی عدد ما اعشاریست بنابراین تو خط 4 عدد اعشاری ما رو بعلاوه ی 1 کن و درون متغییر Dpaging بریز
در خط 5 هم اگر عدد درون متغییر Dpaging یک عدد اعشاری نبود که هیچ ، تقسیم انجام میشه ، اما اگر عدد درون متغییر Dpaging یک عدد اعشاری بود با استفاده از تبدیل (int) قسمت اعشاری را از بین میبریم و فقط قسمت صحیح درون متغییر Dpaging باقی میماند ... سپس PageIndex+1 میشه و تقسیم بر Dpaging میشه و باقیمانده درون متغییر PageIndex قرار میگیره و ما بقی ماجرا رو قبلتر توضیح دادیم که چی میشه.اگه حاصل تقسیم تعداد رکوردها بر PageSize یک عدد صحیح باشه هیچ مشکلی پیش نمیاد چون دقیقا تعداد پیج های ما متناسب با تعداد رکورد هامون میشه مثلا 10 تا پیج داریم و تو هر پیج هم 2 تا رکورد داریم یعنی جمعا 20 تا رکورد داشتیم که تو هر صفحه 2 تاش نمایش داده میشه (یعنی 20 / 2 = 10 به عبارتی ما 10 صفحه داریم که تو هر صفحه 2 تا رکورد هست).
اما اگه حاصل تقسیم تعداد رکوردها بر PageSize یک عدد اعشاری باشه تناسب پیج های ما با رکورد هامون به هم میریزه و صفحه آخر گریدویو رو به ما نمایش نمیده مثلا اگه 19 تا رکورد داشته باشیم و 9 تا پیج و تو هر پیج 2 تا رکورد داشته باشیم ، از پیج اول تا پیج هجدهم هر پیج دوتا دوتا ، رکورد توش جا میگیره اما تو پیج نوزدهم یک رکورد جا میگیره (نیم صفحه) که برنامه ، پیج نوزدهم رو که پیج آخر هست چون نیم صفحه هستش به ما نشون نمیده (19 / 2 = 9.5) (که 9.5 قسمت اعشاریش یعنی 0.5 به معنای یک نیم صفحه هست) که تو مثال قبلی این موضوع رو دیدید به همین دلیل برای حل این موضوع ما از مثال بالایی (کدهای بالا) استفاده کردیم.
یعنی تو خط 4 اگر ما Dpaging رو به علاوه ی 1 نمیکردیم ، هنگام اجرای برنامه و ورق زدن پیج ها ، صفحه ی آخر گریدویو نمایش داده نمیشد و یک راست میپرید به صفحه ی اول و صفحه ی آخر رو به ما نشون نمیداد به همین دلیل تو خط 4 ما Dpaging رو به علاوه ی 1 کردیم به عبارت دیگه عدد اعشاری ذخیره شده در Dpaging رو به اضافه ی 1 کردیم تا نیم صفحه ی آخری رو حساب کنه و به ما نمایشش بده چون ما 5 تا رکورد داشتیم ، تو صفحه اول 2 رکورد اول نمایش داد (یعنی رکورد 1 و 2 ) ، تو صفحه دوم نیز 2 رکورد دوم رو نمایش داد (یعنی رکورد 3 و 4 ) ، اما صفحه آخری فقط یک رکورد رو باید نشون میداد که نداد (یعنی رکورد 5 )
یعنی هر صفحه ی کامل ، دارای دو رکورد بود اما صفحه آخر تنها دارای یک رکورد بود به همین دلیل به صفحه ی آخر ما میگیم نیم صفحه.
3 سال پیش
در تاریخ 1400/02/04 منتشر شده
است.
574
بـار بازدید شده