PDA

View Full Version : نمایش تعداد مشخصی رکورد در Gridview



KIMIA1981
جمعه 12 بهمن 1386, 15:00 عصر
اگر نتایج جستجو از بانکمون زیاد باشه برای اینکه Load صفحه سنگین نشه می خوام مقدار مشخصی مثلاً 20 یا 50 رکورد اول بانک رانشون بده و در Paging های بعدی مثلا 50 تای بعدی نمایش داده بشه . ممکنه راهنمایی کنید .

mahdi_farhani
جمعه 12 بهمن 1386, 15:06 عصر
Gridview خاصیتی به نام Allowpaging داره که میتونی از اون استفاده کنی ، همچنین خاصیتی به نام Pagesize که تعداد رکورد را براش مشخص میکنی.

KIMIA1981
جمعه 12 بهمن 1386, 16:34 عصر
بله اونو می دونم ولی می خوام بار اول به 50 رکورد مورد نظر که رسید دیگه توی بقیه بانک جستجو نکنه وقتی صفحه بعدی رو زدم از اون به بعدو جستجو کنه .
اونوقت اون Paging خود Gridview همین کارو می کنه یا اگه یک میلیون رکورد داشته باشم توی همه یک ملیون رکورد جستجو می کنه؟

mahdi_farhani
جمعه 12 بهمن 1386, 16:44 عصر
همون اول کل بانکو بخون و تو یه یه دیتاتیبل نگه داری کن و به گرید نسبت بده ، حالا موقعه عوض شدن صفحه احتیاجی به دسترسی به دیتایس نداری کافی یه بار دیگه با همون دیتاتیبل گرید رو بایند کنی ....

e-shahshahani
جمعه 12 بهمن 1386, 19:08 عصر
من برای این کار از stored procedure و کد #c زیر استفاده می کنم
متد #c برای ایجاد صفحه بندی استفاده می شود.
در صفحه aspx هم از یک repeater استفاده کرده ام. البته می شود از gridview هم استفاده کرد ولی باید paging آن را غیرفعال کرد

کد :


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[product_Products_GetAllPaging]
@PageIndex int, @PageSize int, @TotalRecords int OUTPUT
AS
BEGIN

DECLARE @PageLowerBound int;
DECLARE @PageUpperBound int;

SELECT @PageLowerBound = @PageSize * @PageIndex;
SELECT @PageUpperBound = @PageSize - 1 + @PageLowerBound;

DECLARE @Products TABLE
(
IndexId int IDENTITY (0, 1) NOT NULL,
ProductId int
)

INSERT INTO @Products ([ProductId])
SELECT [ProductId] FROM [product_Products] ORDER BY [ProductId] DESC;

SELECT @TotalRecords = @@ROWCOUNT;

SELECT p.ProductId, pName, [pDescription]
FROM product_Products AS p, @Products t
WHERE ((p.ProductId = t.ProductId)
AND (t.IndexId >= @PageLowerBound AND t.IndexId <= @PageUpperBound))
ORDER BY [ProductId] DESC;

END




public class Paging
{
public static string GetPagingHtml(int pageIndex, int pageSize, int itemsCount, string pagingUrl)
{
int pagesCount = 0;
string paging = "";

if (itemsCount > 0)
pagesCount = ((itemsCount - 1) / pageSize) + 1;

if (pagesCount == 1)
{
paging = "";
}
else if (pagesCount <= 11) // فقط 11 تا شماره صفحه نشان بده، 5 تا راست و 5 تا چپ
{
for (int p = 1; p <= pagesCount; p++)
{
if (p == pageIndex + 1)
paging += string.Format("<span class=\"x1\">{0}</span>&nbsp;&nbsp;", p);
else
{
string href = pagingUrl + p;
paging += string.Format("<span class=\"x2\"><a href=\"{0}\">{1}</a></span>&nbsp;&nbsp;", href, p);
}
}
}
else
{
int idx1 = pageIndex - 4;
int idx2 = pageIndex + 6;

if (idx1 < 1)
{
idx1 = 1;
idx2 = 10;
}

if (idx2 > pagesCount)
{
idx1 = pagesCount - 9;
idx2 = pagesCount;
}

for (int p = idx1; p <= idx2; p++)
{
if (p == pageIndex + 1)
paging += string.Format("<span class=\"x1\">{0}</span>&nbsp;&nbsp;", p);
else
{
string href = pagingUrl + p;
paging += string.Format("<span class=\"x2\"><a href=\"{0}\">{1}</a></span>&nbsp;&nbsp;", href, p);
}
}

string info = string.Format("<span>صفحه {0} از {1}</span>&nbsp;&nbsp;", pageIndex + 1, pagesCount);
string first = "";
string prev = "";
string next = "";
string last = "";

if (pageIndex > 5)
first = string.Format("<a href=\"{0}\">اول</a>&nbsp;&nbsp;", pagingUrl + "1");

if (pageIndex != 0)
prev = string.Format("<a href=\"{0}\">قبلی</a>&nbsp;&nbsp;", pagingUrl + pageIndex);

if (pageIndex != pagesCount - 1)
next = string.Format("<a href=\"{0}\">بعدی</a>&nbsp;&nbsp;", pagingUrl + pageIndex + 2);

if (pageIndex < pagesCount - 1 - 5)
last = string.Format("<a href=\"{0}\">آخر</a>", pagingUrl + pagesCount);

paging = info + first + prev + paging + next + last;
}

return paging;
}
}

mahdi_farhani
جمعه 12 بهمن 1386, 19:27 عصر
خوب دوست عزیز این روشی که شما گفتید ، خوب هست .ولی از نظر من یک اشکال داره اونم اینه که اگر به فرض مثال شما 5 صفحه داشته باشید و بخواهید بین این 5 صفحه مانور بدید چند بار باید به دیتابیس دسترسی داشته باشی .........

e-shahshahani
جمعه 12 بهمن 1386, 19:56 عصر
خب من کدی را که خودم نوشته بودم ارائه دادم و قسمتی از مساله را حل کردم. بقیه اش با دیگر دوستان!!!