خانه > برنامه نویسی > Custom Paging در GridView به کمک LINQ

Custom Paging در GridView به کمک LINQ

download دریافت کد این نوشته 

LINQ چیست؟
LINQ که سرنام Language Integrated Query است یک روش جدید در دات نت برای انجام پرس و جو روی انواع داده‌هاست.
برای آشنایی بیشتر با LINQ مطالب زیر را که نوشته حامد بنایی است مطالعه کنید:
+ LINQ بخش اول
+ LINQ بخش دوم – LINQ to SQL

Custom Paging چیست؟
در دات نت وقتی بخواهیم لیستی از اطلاعات را نشان بدهید از کنترل‌هایی نظیر GridView استفاده می‌کنیم. اگر تعداد رکوردها زیاد باشد از قابلیت paging در GridView استفاده می‌شود. به کمک paging رکوردها در صفحاتی که سایزشان را مشخص می‌کنیم نمایش داده می‌شوند.

Gridview Paging

به طور پیش فرض در paging عادی تمام رکوردها از بانک اطلاعاتی دریافت می‌شوند و در هر صفحه فقط بخشی از رکوردها که مورد نیاز هستند نمایش داده می‌شوند. Custom Paging یک روش سفارشی برای انجام صفحه بندی است که در آن در هر صفحه از GridView فقط رکوردهای مربوط به همان صفحه از بانک اطلاعاتی دریافت می‌شوند.
به عنوان مثال فرض کنید ما ۱۰۰ رکورد داریم و می‌خواهیم آن‌ها را در یک GridView صفحه بندی کنیم. سایز صفحات را هم ۲۰ رکورد در نظر گرفته‌ایم، بنابراین ۵ صفحه خواهیم داشت. در روش paging‌ عادی وقتی در حال تماشای صفحه دوم هستیم (رکوردهای ۲۱ تا ۴۰) تمام ۱۰۰ رکورد از بانک اطلاعاتی دریافت می‌شود ولی فقط رکوردهای ۲۱ تا ۴۰ در GridView‌ نمایش داده می‌شوند.
در روش Custom Paging اما در صفحه دوم فقط رکوردهایی که نیاز داریم نمایش داده بشوند (رکوردهای ۲۱ تا ۴۰) از بانک اطلاعاتی دریافت می‌شوند. این یک روش بهینه است و البته کارآیی و سرعت برنامه را به خصوص در حجم اطلاعات بالا بسیار افزایش می‌دهد.

Custom Paging به کمک LINQ
قبل از هر چیز Visual Studio‌ را باز کنید و یک Web Site جدید بسازید.
ابتدا فرض می‌کنیم یک جدول در بانک اطلاعاتی به نام City‌ داریم با دو فیلد CityId از نوع int و CityName‌ از نوعnvarchar 50 . حالا یک LINQ to SQL Class به نام City می‌سازیم و جدول City را از بانک اطلاعاتی به آن اضافه می‌کنیم:

City Table

در پوشه App_Code وب سایت یک کلاس جدید به نام CityClass ایجاد می‌کنیم. در این کلاس می‌خواهیم متدهای لازم برای Custom Paging را به شرح زیر بنویسیم:

    public IQueryable BindGrid(int startRowIndex, int maximumRows)
    {
        CityDataContext db = new CityDataContext();
        var query = from c in db.Cities select c;
        return query.Skip(startRowIndex).Take(maximumRows);
    }

    public int GetCityCount()
    {
        CityDataContext db = new CityDataContext();
        return (from c in db.Cities select c).Count();
    }

حالا می‌رسیم به بخش نمایش کار. یک GridView و یک ObjectDataSource به صفحه‌مان اضافه می‌کنیم.

Enable Paging کنترل GridView را علامت بزنید و Datasource آن را ObjectDataSource1 انتخاب کنید

Gridview Config

حالا نوبت به تنظیم ObjectDataSource‌ می‌رسد. TypeName همان نام کلاسی که قبلاً ایجاد کردیم یعنی CityClass، همچنین نام دو متدی را که در CityClass نوشته بودیم به عنوان SelectCountMethod و SelectMethod اضافه می‌کنیم. فراموش نکنید که Enable Paging را هم true کنید.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        EnablePaging="true" SelectCountMethod="GetCityCount"
        SelectMethod="BindGrid" TypeName="CityClass" />

تمام شد! سایت را اجرا کنید و نتیجه کار را ببینید.

[idc-vote]

دسته هابرنامه نویسی برچسب ها:, , ,
  1. ۱۲ مرداد ۱۳۸۸ در ۲۰:۳۱ | #1

    با سلام
    دیر وقتی است آدرس فیدتان در فید خوانم هست و مطالبت را دنبال میکنم
    بنده نقش کوچکی در بلاگفا دارم و در خصوص پست قبل توضیحاتی ارائه میگردد
    سرویس بلاگفا پس از آغاز کار به نقطه ای رسید که برنامه قبلی جوابگوی نیاز مشترکانمان نبود و به ناچار تغییراتی در کد برنامه ایجاد شد و حدود ۳ روز تمام سیستم قطع بود پس از بالا آمدن دوباره تمام کاربران باید مجددا بلاگ خود را ثبت میکردند تا مطالبشان از بین نرود که این کار با حداقل یکبار لاگین نمودن به انجام میرسید بسیاری از کاربران متوجه این تغییر نبودند زیرا لاگین نمودند و مطالبشان هم موجود بود اما دوستانی که لاگین ننمودند تا یکسال فرصت داشتند این عمل را انجام دهند و پس از آن ما تمام دامنه ها را آزاد نموده و مطالب دامنه ها را از دیتابیس حذف نمودیم پس کمی هم خودتان مقصرید دوست عزیز

    • حامد سعیدی فرد
      ۱۳ مرداد ۱۳۸۸ در ۰۹:۰۰ | #2

      ضمن تشکر، با فرض درست بودن صحبت شما، فاصله لاگین‌های من هرگز به یک سال نرسید. به هر حال در مورد بلاگفا خواهم نوشت.

    • فرشید
      ۱۶ مرداد ۱۳۸۸ در ۱۲:۵۷ | #3

      “تمام کاربران باید مجددا بلاگ خود را ثبت میکردند”
      در دنیای فناوری ارتباطات یک همچنین مشکلاتی بندرت توسط سرویسدهندگان شبکه های اجتماعی حرفه ای اتفاق می افتد
      حفظ داده ها یعنی حفظ کل سرمایه یک سرویس دهنده!
      سرویس دهنده بلاگفا با این کار دچار یک افول و شکست فنی شده و باید سقوط و ورود خودشو به سطوح آماتوریه بدون امنیت در میان سرویس دهندگان جشن بگیره!

  2. علی رضایی
    ۱۰ بهمن ۱۳۸۸ در ۱۱:۲۲ | #4

    سلام این IQueryable که گذاشتید کارش چیه
    میشه به طور کامل توضیح بدید
    متشکرم

    • حامد سعیدی فرد
      ۱۰ بهمن ۱۳۸۸ در ۱۳:۲۸ | #5

      IQueryable یک اینترفیس هست در Linq. توضیحات کامل رو در MSDN میتونید مطالعه کنید.

  1. بدون بازتاب