PDA

View Full Version : سوال: صفحه بندی gridview



mehriadeli
چهارشنبه 09 تیر 1389, 11:46 صبح
با سلام
چطور میتونم GridView را صفحه بندی کنم؟

raziee
چهارشنبه 09 تیر 1389, 11:59 صبح
با سلام
چطور میتونم GridView را صفحه بندی کنم؟
در حالت ساده AllowPaging رو true کنید.
مقدار PageSize رو برابر با مقدار دلخوه بدید.
----------------------------------------------

اما این روش کاربردی نیست!!!
به دلیل اینکه ابتدا رکورد ها رو برمیگردونه و بعد صفحه بندی میکنه.
برای پیاده سازی صفحه بندی بهترین راه صفحه بندی در SQL هست نه در گرید.

maxpayn2
چهارشنبه 09 تیر 1389, 12:14 عصر
برای پیاده سازی صفحه بندی بهترین راه صفحه بندی در SQL هست نه در گرید.

میشه با یک مثال توضیح بدید ؟

mehriadeli
چهارشنبه 09 تیر 1389, 12:26 عصر
راضیه عزیر از راهنمائیت ممنونم .
َAllowPaging =T Rue هست ولی دکمه قبلی و بعدی Grid رو که میزنم اتفاقی نمی افته
ممکنه بگی روش SQl چطور انجام میشه؟
مرسی

raziee
چهارشنبه 09 تیر 1389, 12:30 عصر
میشه با یک مثال توضیح بدید ؟


Create PROCEDURE [dbo].[sp_Gets]
(
@PageIndex int,
@PageSize int
)
AS
BEGIN
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
FROM [YourTableName])
AS e
--WHERE RowNum BETWEEN ((@PageIndex * @PageSize) - (@PageSize - 1)) AND (@PageIndex * @PageSize)
WHERE RowNum BETWEEN ((@PageIndex * @PageSize) + 1) AND ((@PageIndex + 1) * @PageSize)
END

لازم به ذکر هست که این کد رو از کدهای مربوط به گریدویو آقای بهروز راد گرفته شده.


در ممبرشیپ دات نت برای گرفتن لیست کاربران:


CREATE PROCEDURE [dbo].[aspnet_Membership_GetAllUsers]
@ApplicationName nvarchar(256),
@PageIndex int,
@PageSize int
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN 0


-- Set the page bounds
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @TotalRecords int
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageSize - 1 + @PageLowerBound

-- Create a temp table TO store the select results
CREATE TABLE #PageIndexForUsers
(
IndexId int IDENTITY (0, 1) NOT NULL,
UserId uniqueidentifier
)

-- Insert into our temp table
INSERT INTO #PageIndexForUsers (UserId)
SELECT u.UserId
FROM dbo.aspnet_Membership m, dbo.aspnet_Users u
WHERE u.ApplicationId = @ApplicationId AND u.UserId = m.UserId
ORDER BY u.UserName

SELECT @TotalRecords = @@ROWCOUNT

SELECT u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved,
m.CreateDate,
m.LastLoginDate,
u.LastActivityDate,
m.LastPasswordChangedDate,
u.UserId, m.IsLockedOut,
m.LastLockoutDate
FROM dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p
WHERE u.UserId = p.UserId AND u.UserId = m.UserId AND
p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
ORDER BY u.UserName
RETURN @TotalRecords
END

raziee
چهارشنبه 09 تیر 1389, 12:37 عصر
راضیه عزیر از راهنمائیت ممنونم .
َ

دوست من اسم من "حسین" و فامیلیم "رضیئی" هست:بامزه:



ممکنه بگی روش SQl چطور انجام میشه؟
در پست قبل گفتم.
اگه قسمتیش رو متوجه نشدید بگید تا توضیح بدم.

oldboy
چهارشنبه 09 تیر 1389, 12:54 عصر
البته ساده ترین راه اینه که allowpaging رو true کنی.
برای که کار کنه هم باید تو رویداد PageIndexChanging این کد رو اضافه کنی.


protected void grvProductsList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grvProductsList.PageIndex = e.NewPageIndex;
grvProductsList.DataBind();
}

Vahid_moghaddam
چهارشنبه 09 تیر 1389, 12:54 عصر
راضیه عزیر از راهنمائیت ممنونم .
َAllowPaging =T Rue هست ولی دکمه قبلی و بعدی Grid رو که میزنم اتفاقی نمی افته
ممکنه بگی روش SQl چطور انجام میشه؟
مرسی

روش صفحه بندی در sql روش بهینه تریه. اگه از LinqToSql هم استفاده کنید، می تونید paging رو در query ها انجام بدید. برای تغییر صفحه به شکل زیر عمل کنید:


protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grid.PageIndex = e.NewPageIndex;
grid.DataBind();
}

و اگه DataSource رو runtime به گریدویو اختصاص می دید، قبل از DataBind دوباره اون رو برای GridView مشخص کنید.

raziee
چهارشنبه 09 تیر 1389, 13:26 عصر
روش صفحه بندی در sql روش بهینه تریه. اگه از LinqToSql هم استفاده کنید، می تونید paging رو در query ها انجام بدید. برای تغییر صفحه به شکل زیر عمل کنید:


protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grid.PageIndex = e.NewPageIndex;
grid.DataBind();
}

و اگه DataSource رو runtime به گریدویو اختصاص می دید، قبل از DataBind دوباره اون رو برای GridView مشخص کنید.

اگر منظورتون Paging با استفاده از LINQ هست قبلا در اینجا (http://barnamenevis.org/forum/showthread.php?t=196548)بحث شده و با مخالفت همراه بوده به همون دلیل که در پست 2 ذکر کردم.
و همینطور نقل از جناب راد

چون تمامی رکوردها رو لود می کنه و این یک فاجعه برای حافظه است. Paging صحیح فقط از طریق Stored Procedure و متد Row_Number در SQL Server قابل انجام هست.

Vahid_moghaddam
چهارشنبه 09 تیر 1389, 13:34 عصر
اگر منظورتون Paging با استفاده از LINQ هست قبلا در اینجا (http://barnamenevis.org/forum/showthread.php?t=196548)بحث شده و با مخالفت همراه بوده به همون دلیل که در پست 2 ذکر کردم.
و همینطور نقل از جناب راد

حرف شما درست نیست. در همون تاپیک:

http://barnamenevis.org/forum/showpost.php?p=957964&postcount=19

http://barnamenevis.org/forum/showpost.php?p=958901&postcount=21

Behrouz_Rad
چهارشنبه 09 تیر 1389, 13:38 عصر
raziee@
بنده در مورد اون تاپیک اشتباه کرده بودم.