当我尝试在Repeater中使用分页支持时,PagedDataSource救了我。我提出了以下方法,并希望与大家分享是否存在任何陷阱,或者是否有任何改进的机会。
在这里,
/// <summary>
/// Create pagination for Repeater
/// </summary>
/// <param name="context">HttpContext</param>
/// <param name="obj">System.Collections.IEnumerable</param>
/// <param name="rptr">Repeater Control</param>
/// <param name="pgSize">How many records in each page</param>
/// <returns>Pagination String</returns>
public static String pagination(HttpContext context,Object obj,Repeater rptr ,int pgSize )
{
String rtn = String.Empty;
int curpage = 0;
PagedDataSource pds = new PagedDataSource();
pds.DataSource=(System.Collections.IEnumerable)obj;
pds.AllowPaging = true;
pds.PageSize = pgSize;
if (context.Request.QueryString["page"] != null)
{
curpage = Convert.ToInt32(context.Request.QueryString["page"]);
}
else
{
curpage = 1;
}
pds.CurrentPageIndex = curpage - 1;
if (!pds.IsFirstPage)
{
rtn = "<a href='?page=" + (curpage - 1).ToString() + "'>Prev</a> ";
}
if (curpage == 1 && pds.DataSourceCount > pds.PageSize)
rtn = "1";
else if (pds.DataSourceCount == 0)
rtn = "No data to display";
else if (curpage > 1 && pds.DataSourceCount > pds.PageSize)
rtn = rtn + "<a href='?page=1'>1</a> ";
for (int i = 2; i <= pds.PageCount; i++)
{
if (i == curpage)
rtn = rtn + " " + i.ToString();
else
rtn = rtn + " <a href='?page=" + i.ToString() + "'>" + i.ToString() + "</a>";
}
if (!pds.IsLastPage)
{
rtn += " <a href='?page=" + (curpage + 1).ToString() + ">Next</a>";
}
rptr.DataSource = pds;
rptr.DataBind();
return rtn;
}
答案 0 :(得分:1)
我可以看到一些最佳实践,但你的结构非常合理。但是,我可以建议如下:
1)我会建议代码保护。
2)内联格式化(使用+运算符构建字符串)比String.Format()方法更昂贵。
3)永远不要使用Convert.ToInt32(),因为它可能导致代码保释。请使用Int32.TryParse(),因为它更安全。
4)此外,您可能需要查看网址路由或网址重写的概念,以使您的网址更加友好。