PDA

View Full Version : سوال: صفحه بندی گرید ویو و جزئیات



hmahdavi921
یک شنبه 12 بهمن 1393, 08:46 صبح
سلام خدمت برنامه نویسان عزیز
من تو وب سایتم از گرید ویو برای نمایش نتایج جستجوی محصولات استفاده کردم .اونجوری که خوندم استفاده از paging پیش فرض گریدویو پیشنهاد نمیشه.پس در متدgridview1_indexchanging با دستور e..newIndexChanging شماره ایندکسی که کاربر روی اون کلیک کرده به صورت یک عدد میتونیم بدست بیاریم .این عدد رو *10 و (این عدد+1)*10 میکنیم و رنج رکورد های انتخابی از دیتا بیس دستمون میاد.اما یه نکته جا مونده !!! حالا که گریویو رو فقط باید با رنج های مشخص شده بایند می کنیم ایندکس های گرید ویو که پایین نشون داده میشن تکلیفشون چی میشه؟ باید به گرید ویو بفهمونیم که تعداد کل رکورد ها چند تا هستند تا اون هم ایندکس ها رو ایجاد کنه!
دوستان لطفا راهنمایی بفرمائید

hmahdavi921
یک شنبه 12 بهمن 1393, 13:34 عصر
یه سوال دیگه : من از stored procudure استفاده میکنم آیا میشه تو یک stored procudure هم تعداد رکورد موجود رو بدست آورد هم تو رنج مشخص شده select کنیم؟

xsbehx
شنبه 16 خرداد 1394, 15:55 عصر
سلام
تعداد خروجی ها رو چرا نمی شه بدست اورد؟
شما هم تو خود پروسیجرتون می تونید تعداد دستورت رو هم برگردونید و هم اینکه با متد count تو .net اینکارو کنید. البته تو linq که اینطوری هست

من زیاد متوجه سوالتون نشدم ولی اگر منظورتون اینه که یک procedure رو اجرا کنید و مثلا تعداد 20 خانه اول رو بدست بیارید باید بعد از دستور select یا procedure تون از متد


.take(20)

استفاده کنید. اما این فقط 20 تای اول رو می یاره و برای بدست اوردن 20 تای دوم یا ... هم می تونید یه کارهای بکنید اما اینطوری صفحه بندی کردن تو asp سخت و شما باید برید داخل Sql و صفحه بندی رو اونجا بکنید. از طرفی شاید شما با ado کار می کنید یا linq to entity یا ... که روش ها متفوت خواهد شد
سه روش برای اینکار تو sql وجود داره
روش اول CTE که مخفف Common Table Experssion است
روش دوم روش استفاده از Top and Except است
روش سوم هم صفحه بندی هنگام اجرای کوئری ها با استفاده از دستورات offset و fetch هست
بهترین و سریع ترینشون استفاده از روش اوله ولی ساده ترینشون استفاده از روش دومه

من پروسیجر دومی رو اینجا می یارم:


create procedure [dbo].[sptPagination_Two]
@pageSize int,
@pageNumber int
as
begin
select top(@pageSize * @pageNumber) fldId, fldName, fldDate from tblPagination
except
select top(@pageSize * (@pageNumber-1)) fldId, fldName, fldDate from tblPagination
end

دستور except رو که حتما باهاش آشنایی دارید. این دستور می یاد و دو تا select رو انجام می ده. مثلا خروجی اول می شه 10 تا سطر اول و Select دوم هم می شه 30 تا سط اول. حالا می یاد و تفاضل این دو تا خروجی رو به عنوان خروجی نهایی بر می گردونه. یعنی سطر 11 تا 30 رو

مقدار pageSize برای تعداد محتوایی که قراره در یک صفحه باشه و مقدار pageNumber هم شماره صفحه است. اگر من اولین پارامتر پروسیجرم رو 5 بدم و دومی رو سه بدم می یاد شماره بندی صفحاتم رو 5 تا 5 تا می کنه و صفحه سوم رو برام می یاره که می شه خونه های 16 و17 و 18 و 19 و 20
هدف اینه که مدیر سیستم تعیین کنه که صفحه مورد نظر که قراره شماره بندی بشه، هر کدوم چنتا مطلب داخلش داشته باشه. بعد اونو می گیریم و تو یک جایی ذخیره می کنیم و از اون تو صفحه بندی استفاده می کنیم
یعنی این پروسیجر جوری ساخته شده که مدیریت بتونه تعداد محتوای داخل هر صفحه رو مثلا 5 تا 5 تا یا 10 تا 10 تا یا ... بکنه