Mostafa_Dindar
دوشنبه 21 دی 1388, 19:55 عصر
سلام .
در مورد Custom Paging & Sorting بارها و بارها در این سایت بحث شده . بخشی از آنها مربوط به Sql2000 هست و بخش دیگری از آنها که در مورد Sql2005 هست تنها در مورد Paging بحث شده و بیشتر به نحوه پیاده سازی StoredProcedure پرداخته شده . و هنوز ابهامات زیادی دراین مورد باقی مونده.
من قصد دارم در این مقاله به طور مفصل به صورت گام به گام به Sorting و Paging در سطح دیتابیس بپردازم .
در انتها فایل پروژه ضمیمه شده که همراه با آن فایل دیتابیس با 50 هزار رکورد موجود است و در آنجا تفاوت سرعت و کارایی را مشاهده خواهید کرد . کد با دات نت 2.0 نوشته شده پس میتوانید با VS 2005 , VS 2008 استفاده کنید . و برای اجرای تنظیمات خاصی لازم نیست و تنها کافیه Ctr + F5 بزنید .
همچنین مثال به صورت معماری 3 لایه پیاده سازی شده تا دوستان تازه کار هم با آن آشنا شوند .
Paging:
اهمیت Paging بر هیچ کس پوشیده نیست . مواقعی هست که منطقی نیست همه رکوردها رو یکجا به کاربر نشون بدیم . خوب پس باید Paging رو اعمال کنیم . این کار چندین جا امکان پذیر هست :
یک روش میتونه Client Side Paging باشه که توسط جاوا اسکریپت اینکار رو میکنیم .
اینجا چند تا نمونه هست که میتونید دنبال کنید که از حوزه بحث ما خارجه .
Client-side Paging for DataGrids (http://msdn.microsoft.com/en-us/magazine/cc164022.aspx)
Client Side Table Sorting, Paging and Filtering with jQuery (http://beckelman.net/post/2008/10/23/Client-Side-Table-Sorting-Paging-and-Filtering-with-jQuery-Demo.aspx)
همچنین Paging میتونه درBusiness Layer رخ بده . در این حالت شما یک لیستی از آبجکتها رو از DataSource میخونید و اونا رو Paging میکنید که من در پروژه ضمیمه اون رو پیاده سازی کردم ولی این مبحث نیز مربوط به بحث این مقاله نیست .
همچنین اگه تعداد رکوردها کم باشه میتونیم از DataSet استفاده کنیم . در صورت استفاده از DataSet ما میتوانیم از ویژگیهای Built-In داخل GridView و ListView , FormView , DetailsView برای Paging and Sorting استفاده کنیم . ولی همانطور که میدونید در صورتی که از DataSet استفاده کنیم عملا در ابتدا همه رکوردها واکشی میشوند . فرض کنید کوئری ما 50 هزار رکورد رو برمیگردونه و ما PageSize کنترلGridView رو برابر 10 قرار بدیم . در این صورت ابتدا همه 50 هزار رکورد در حافظه لود شده ولی تنها 10 تای اول رو نشون میده . پس عملا میشه گفت Paging ما مجازی هست . البت%D
در مورد Custom Paging & Sorting بارها و بارها در این سایت بحث شده . بخشی از آنها مربوط به Sql2000 هست و بخش دیگری از آنها که در مورد Sql2005 هست تنها در مورد Paging بحث شده و بیشتر به نحوه پیاده سازی StoredProcedure پرداخته شده . و هنوز ابهامات زیادی دراین مورد باقی مونده.
من قصد دارم در این مقاله به طور مفصل به صورت گام به گام به Sorting و Paging در سطح دیتابیس بپردازم .
در انتها فایل پروژه ضمیمه شده که همراه با آن فایل دیتابیس با 50 هزار رکورد موجود است و در آنجا تفاوت سرعت و کارایی را مشاهده خواهید کرد . کد با دات نت 2.0 نوشته شده پس میتوانید با VS 2005 , VS 2008 استفاده کنید . و برای اجرای تنظیمات خاصی لازم نیست و تنها کافیه Ctr + F5 بزنید .
همچنین مثال به صورت معماری 3 لایه پیاده سازی شده تا دوستان تازه کار هم با آن آشنا شوند .
Paging:
اهمیت Paging بر هیچ کس پوشیده نیست . مواقعی هست که منطقی نیست همه رکوردها رو یکجا به کاربر نشون بدیم . خوب پس باید Paging رو اعمال کنیم . این کار چندین جا امکان پذیر هست :
یک روش میتونه Client Side Paging باشه که توسط جاوا اسکریپت اینکار رو میکنیم .
اینجا چند تا نمونه هست که میتونید دنبال کنید که از حوزه بحث ما خارجه .
Client-side Paging for DataGrids (http://msdn.microsoft.com/en-us/magazine/cc164022.aspx)
Client Side Table Sorting, Paging and Filtering with jQuery (http://beckelman.net/post/2008/10/23/Client-Side-Table-Sorting-Paging-and-Filtering-with-jQuery-Demo.aspx)
همچنین Paging میتونه درBusiness Layer رخ بده . در این حالت شما یک لیستی از آبجکتها رو از DataSource میخونید و اونا رو Paging میکنید که من در پروژه ضمیمه اون رو پیاده سازی کردم ولی این مبحث نیز مربوط به بحث این مقاله نیست .
همچنین اگه تعداد رکوردها کم باشه میتونیم از DataSet استفاده کنیم . در صورت استفاده از DataSet ما میتوانیم از ویژگیهای Built-In داخل GridView و ListView , FormView , DetailsView برای Paging and Sorting استفاده کنیم . ولی همانطور که میدونید در صورتی که از DataSet استفاده کنیم عملا در ابتدا همه رکوردها واکشی میشوند . فرض کنید کوئری ما 50 هزار رکورد رو برمیگردونه و ما PageSize کنترلGridView رو برابر 10 قرار بدیم . در این صورت ابتدا همه 50 هزار رکورد در حافظه لود شده ولی تنها 10 تای اول رو نشون میده . پس عملا میشه گفت Paging ما مجازی هست . البت%D