دوستان توجه داشته باشین در هر کدام از لینک باتن های تصویر لینکی هست که با گوئری استرینگ شماره صفحه رو ارسال می کنه
با مقدار دهی خاصیت QueryStringField قادر خواهید بود این کار رو انجام بدید:
QueryStringField="page"
می خواستم بپرسم ما چطوری می تونیم صفحه بندی مانند شکل زیر داشته باشیم
یکی از روش ها استفاده از Pager Template هست:
http://msdn.microsoft.com/en-us/libr...rtemplate.aspx
می تونید به این روش هم عمل کنید:
یک دیتا پیجر بدون کنترل های داخلی رو در قسمت مربوطه قرار بدید:
<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 رو مقدار دهی می کنم که مشخص کننده شماره صفحه هست.
می تونید برای راحتی بیشتر از یک یوزر کنترل برای نگهداری دیتاپیجر و کدها استفاده کنید و این یوزر کنترل رو در گریدویو استفاده کنید.
البته به احتمال زیاد راه های بهتر و اصولی تری هم هست و این روش فقط یک روش سریع و ابتدایی برای این کار هست. همچنین دقت کنید که کدها بهینه نیستند و فقط جنبه ی آموزش مد نظر بوده.
موفق باشید