PDA

View Full Version : سوال: راهنمایی برای نمایش تعداد زیاد رکورد



scorpion_sincity
یک شنبه 29 خرداد 1390, 20:24 عصر
با سلام و خسته نباشید خدمت تمام دوستان
من تعداد بسیار زیاد رکورد در دیتابیس دارم حدود 85هزار رکورد

شما چه پیشنهادی دارید که این اطلاعات رو نمایش بدم که کاربر گیج نشه و راحت بتونه با اطلاعات کار کنه؟؟

ممنون

zarrinnegar
یک شنبه 29 خرداد 1390, 23:38 عصر
با سلام و خسته نباشید خدمت تمام دوستان
من تعداد بسیار زیاد رکورد در دیتابیس دارم حدود 85هزار رکورد

شما چه پیشنهادی دارید که این اطلاعات رو نمایش بدم که کاربر گیج نشه و راحت بتونه با اطلاعات کار کنه؟؟

ممنون


بهترین راه حل اینه که بصورت صفحه بندی کار کنی
در هر حالت کاربر نمیتونه اطلاعات 25 تا 30 رکورد رو همزمان ببینه
بخاطر این صفحه بندی مناسب ترینه
لود دستا هم از دیتابیس راحت تره

حالا اگه نمیتونی صفحه بندی کنی بگو تا راه حل رو بگم

scorpion_sincity
یک شنبه 29 خرداد 1390, 23:49 عصر
نمی خوام تمام 5000تا رو ببینه ولی استفاده از دیتاگرید ویوو خیلی جلوه جالبی نداره

اگه لطف کنید بگید چطور صفحه بندی کنم ممنون می شم

zarrinnegar
دوشنبه 30 خرداد 1390, 00:04 صبح
نمی خوام تمام 5000تا رو ببینه ولی استفاده از دیتاگرید ویوو خیلی جلوه جالبی نداره

اگه لطف کنید بگید چطور صفحه بندی کنم ممنون می شم

پس خوب دقت کن
این نمونه برنامه رو برات قرار میدم ولی باید بجای اسامی فیلد ها اسامی فیلد های جدول خودت رو بزاری
تا حالا که در نوع خودش بی نظیر بوده امیدوارم بدرت شما هم بخوره

1 - یک پروسیجر ایجاد میکنی توی sql
create

PROCEDURE [dbo].[sp_PagedItem]



(

@Page
int,

@RecsPerPage
int


)

AS

در ادامه این پروسیجر یک جدول از نوع temp میسازی با فیلدهای همان جدول خودت

CREATE

TABLE #TempItems

(

ID
int IDENTITY,
,...
,...
(
بجای ... فیلدها رو تعریف میکنی و فیلد id که در این مثال گفته شده باید در ابتدار فیلد هات تعریف شه

بعد با استفاده از دستور insert into رکوردهای جدولت رو به جدول temp وارد میکنی

INSERT

INTO #TempItems
)نام فیلد, نام فیلد,...
(

select
نام فیلد , نام فیلد , ...
from myTable

در اینجا اسامی فیلدها را قرار میدهی و بجای نام mytable از نام جدول خودت استفاده میکنی

سپس دستورات زیر را در انتهای پروسیجر اضافه میکنی

DECLARE

@FirstRec int, @LastRec int

SELECT

@FirstRec = (@Page - 1) * @RecsPerPage

SELECT

@LastRec = (@Page * @RecsPerPage + 1)

SELECT

*,

MoreRecords
=



(


SELECT COUNT(*)


FROM #TempItems TI


WHERE TI.ID >= @LastRec


)

FROM

#TempItems

WHERE

ID > @FirstRec AND ID < @LastRec


بعد پروسیجر را ذخیره میکنی و بعد از آن استفاده میکنی

exec sp_PagedItem 2,500

عدد اول (2) شماره صفحه و عدد دوم (500) تعداد رکورد هر صفحه را مشخص میکند

بعد در برنامه میتونی دکمه قرار بدی بعد این پروسیجر رو مدیریت کنی که بره به صفحه چند و چند تایی رکورد ها رو بیاره
با زدن هر دکمه صفحه بعدی این پروسیجر رو اجرا کن و نتیج رو توی یک دیتاگرید نمایش بده
با این روش میتونی میلیونها رکورد رو با سرعت بالا نمایش بدی

در واقع این روشی است که گرید وب داره انجام میده و مایکروسافت هم توی نسخه 2011 sql این قابلیت رو اضافه کرده

امیدوارم بتونی استفاده کنی
مشکلی بود اعلام کن

zarrinnegar
دوشنبه 30 خرداد 1390, 00:27 صبح
نمی خوام تمام 5000تا رو ببینه ولی استفاده از دیتاگرید ویوو خیلی جلوه جالبی نداره

اگه لطف کنید بگید چطور صفحه بندی کنم ممنون می شم

این هم خلاصه



create PROCEDURE [dbo].[sp_PagedItem]
(
@Page int,

@RecsPerPage int
)
AS
CREATE
TABLE #TempItems

(



ID intIDENTITY,

,
,
,
)
INSERT
INTO #TempItems
(,


,


)

SELECT,,FROM myTable

DECLARE
FirstRec int, @LastRec int

SELECT
@FirstRec =(@Page - 1)* @RecsPerPage

SELECT
@LastRec =(@Page * @RecsPerPage + 1)

SELECT
*,

MoreRecords
=
(


SELECTCOUNT(*)

FROM #TempItems TI

WHERE TI.ID >= @LastRec

)

FROM
#TempItems

WHERE
ID > @FirstRec AND ID < @LastRec

scorpion_sincity
دوشنبه 30 خرداد 1390, 10:43 صبح
ایول آقا خیلی خیلی مرسی