PDA

View Full Version : سوال: پیاده سازی صفحه بندی خاص برای گرید ویو



sara_aryanfar
یک شنبه 08 مرداد 1391, 21:55 عصر
با سلام می خواستم بپرسم ما چطوری می تونیم صفحه بندی مانند شکل زیر داشته باشیم
90453
دوستان توجه داشته باشین در هر کدام از لینک باتن های تصویر لینکی هست که با گوئری استرینگ شماره صفحه رو ارسال می کنه مثلاhttp://example.com/index.aspx?page=2 والی آخر یعنی وقتی روی 3 کلیک میشه اینطوریه لینکش http://example.com/index.aspx?page=3

clover
یک شنبه 08 مرداد 1391, 22:59 عصر
دوستان توجه داشته باشین در هر کدام از لینک باتن های تصویر لینکی هست که با گوئری استرینگ شماره صفحه رو ارسال می کنه
با مقدار دهی خاصیت QueryStringField قادر خواهید بود این کار رو انجام بدید:

QueryStringField="page"


می خواستم بپرسم ما چطوری می تونیم صفحه بندی مانند شکل زیر داشته باشیم
یکی از روش ها استفاده از Pager Template هست:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate.a spx

می تونید به این روش هم عمل کنید:
یک دیتا پیجر بدون کنترل های داخلی رو در قسمت مربوطه قرار بدید:

<asp:DataPager runat="server" QueryStringField="pg" OnPreRender="DataPager_PreRender" PageSize="10" />
و بعد در هنگام رندر شدن دکمه ها رو اضافه کنید:

protected void DataPager_PreRender(object sender, EventArgs e)
{
DataPager dataPager = sender as DataPager;
StringBuilder stringBuilder = new StringBuilder();
string currentPath = "";

currentPath = Regex.Match(Request.RawUrl, @"^(.*?)(/page-\d+)?/?$").Groups[1].Value;


int totalRows = dataPager.TotalRowCount;
int pageSize = dataPager.PageSize;
int totalPage = (int)Math.Ceiling((decimal)totalRows / pageSize);
int selectedPage = dataPager.StartRowIndex / pageSize + 1;

int startPage = selectedPage - (ButtonCount / 2);
startPage = (startPage < 1) ? 1 : startPage;

int endPage = startPage + ButtonCount - 1;
endPage = (endPage > totalPage) ? totalPage : endPage;

if (selectedPage > ButtonCount / 2 + 1)
{
stringBuilder.Append(string.Format(@"<a href=""{0}{1}"" class=""rc3 rf bbtn"" style=""padding: 1px 6px 3px; margin: 0 2px; height: 14px; color: #000000;"">{2}</a>", currentPath, startPage == 2 ? "" : string.Format("/page-{0}", startPage - 1), "<<"));
}


// paging

for (int i = startPage; i <= endPage; i++)
{
if (selectedPage != i)
{
stringBuilder.Append(string.Format(@"<a href=""{0}{1}"" class=""rc3 rf bbtn"" style=""padding: 1px 6px 3px; margin: 0 2px; height: 14px; color: #000000;"">{2}</a>", currentPath, i == 1 ? "" : string.Format("/page-{0}", i), i));
}
else
{
stringBuilder.Append(string.Format(@"<div class=""rc3 rf ybtn"" style=""padding: 1px 6px 3px; margin: 0 2px; height: 14px; color: #000000;"">{0}</div>", i));
}
}

if (endPage < totalPage)
{
stringBuilder.Append(string.Format(@"<a href=""{0}/page-{1}"" class=""rc3 rf bbtn"" style=""padding: 1px 6px 3px; margin: 0 2px; height: 14px; color: #000000;"">{2}</a>", currentPath, endPage + 1, ">>"));
}

Literal spaceb = new Literal();
spaceb.Text = stringBuilder.ToString();
dataPager.Controls.Add(spaceb);
}
دقت کنید که این مثال برای کنترل های داده ای هست که در Template اونها میشه از DataPager استفاده کرد مانند ListView، برای تعمیم این روش به GridView از یک PlaceHolde در PagerTemplate استفاده کنید و مشخصاتی مانند شماره صفحه ی جاری و غیره رو هم می تونید از PagerSettings به دست بیارید. همچنین دقت کنید که در این مثال از URL Rewriting استفاده کردم و مسیر صفحات رو به صورت مجازی قرار دادم، در نهایت در هنگام Rewrite کردن آدرس ها Query String با نام pg رو مقدار دهی می کنم که مشخص کننده شماره صفحه هست.
می تونید برای راحتی بیشتر از یک یوزر کنترل برای نگهداری دیتاپیجر و کدها استفاده کنید و این یوزر کنترل رو در گریدویو استفاده کنید.

البته به احتمال زیاد راه های بهتر و اصولی تری هم هست و این روش فقط یک روش سریع و ابتدایی برای این کار هست. همچنین دقت کنید که کدها بهینه نیستند و فقط جنبه ی آموزش مد نظر بوده.

موفق باشید