【问题标题】:Pagination support for Repeater对中继器的分页支持
【发布时间】:2010-07-15 05:23:51
【问题描述】:

当我尝试在 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>&nbsp;";
    }

    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>&nbsp;";

    for (int i = 2; i <= pds.PageCount; i++)
    {
        if (i == curpage)
            rtn = rtn + "&nbsp;" + i.ToString();
        else
            rtn = rtn + "&nbsp;<a href='?page=" + i.ToString() + "'>" + i.ToString() + "</a>";
    }

    if (!pds.IsLastPage)
    {
        rtn += "&nbsp;<a href='?page=" + (curpage + 1).ToString() + ">Next</a>";
    }

    rptr.DataSource = pds;
    rptr.DataBind();

    return rtn;
}

【问题讨论】:

    标签: asp.net pagination repeater


    【解决方案1】:

    我可以看到一些最佳实践,但您的结构非常合理。但是,我可以建议以下内容:

    1) 我建议使用代码守卫。

    2) 内联格式化(使用 + 运算符构建字符串)比 String.Format() 方法成本更高。

    3) 切勿使用 Convert.ToInt32() ,因为它会导致代码失效。请使用 Int32.TryParse() 更安全。

    4) 此外,您可能希望了解 Url Routing 或 Url Rewriting 的概念,以使您的 url 更友好。

    【讨论】:

    • 代码保护的一个例子类似于空检查。在您为其属性赋值之前检查对象是否不为空 - 不要忘记投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多