سلام دوست خوبم ، ببینید در کامنت های قبلی هم گفتم که بهترین روشی که برای Paging وجود داره اینه که عمل صفحه بندی رو در سطح Database انجام بدین . چون که شما از SQL Server استفاده می کنید خیلی راحت می تونید این عمل رو انجام بدین . من خلاصش رو می گم . ببینید شما باید ابتدا سطر های پایگاه داده رو از 1 شماره گذاری کنید ( تابع ROW_NUMBER در SQL Server می تونه این کار رو براتون انجام بده ) ، بعد از این کار شما باید عمل فیلترینگ رو بر اساس این ستون انجام بدین . مثلا فرض کنید قصد دارید در هر صفحه 100 رکورد رو نمایش بدین ، قسمت Where ش به صورت زیر میشه :
WHERE number between 1 and 100 ( )
ستون number رو با استفاده از همون تابع ROW_NUMBER ایجاد می کنیم
برای صفحه بعدی
WHERE number between 101 and 201
و به همین صورت .
مزایای این روش اینه که عمل صفحه بندی در سطح Database انجام میشه و واسه کار شما که می خواین داده ها رو در طول شبکه انتقال بدین بهترین روش هست. اون روشی که در پیش گرفتید روش جالبی نیست چونکه عمل صفحه بندی در برنامه انجام میشه . ممکنه در تعداد رکورد های پایین مشکلی ایجاد نکنه ولی در تعداد رکورد های بالا به شدت کند میشه چون برنامه بیشتر وقتش رو در RAM صرف می کنه و باید تمامی رکورد ها در حافظه Load بشن که به شدت ایده بدی هست و Performance و سرعت برنامه به شدت پایین میاد . خودم در طراحی برنامه هام اصلا از BindingSource و Navigator استفاده نمیکنم و ترجیح می دم از همین روش کد نویسی استفاده کنم . چون بهترین روش هست به نظرم و دستتون برای طراحی و دستکاری برنامه بسیار بازه .
بنده برنامه شما رو تغییر دادم . در این برنامه یک کلاس هست به نام PageBoundries که عمل اندیس گذاری صحیح رکورد ها رو انجام میده . وقتی که اندیس ها مشخص شدند خیلی راحت می تونید یک کوئری که در کامنت های قبلی هم نوشتم روش بانک اجرا کنید و سطر ها رو واکشی کنید . سعی کردم کدها رو واضح بنویسم . هر جایی از کدها سوالی داشید بپرسید . به طور خلاصه اومدم یک BindingNavigator بهینه طراحی کردم .
چیز هایی که شما باید تغییر بدین واس برنامه خودتون :
1 – رشته اتصال
2 – کوئری بدست آوردن تعداد رکورد های جدول مورد نظرتون ( TotalRecords )
3 – کوئری واکشی اطلاعات یا همون List .
اینا رو بسته به بانک اطلاعاتی خودتون ویرایش کنید .
اینم پروژش :
http://cld.persiangig.com/dl/FQXoV/7ZCPwI3kxX/PagingWithBindingNavigator.zip