Поддержка пагинации для повторителя - PullRequest
1 голос
/ 15 июля 2010

Пока я пытался поиграть с поддержкой пагинации в 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;
}

1 Ответ

1 голос
/ 15 июля 2010

Я вижу некоторые из них с точки зрения наилучшей практики, но ваша структура довольно крепкая. Однако могу ли я предложить следующее:

1) Я бы предложил охранников кода.

2) Встроенное форматирование (использование оператора + для построения строки) более затратно, чем метод String.Format ().

3) Никогда не используйте Convert.ToInt32 (), так как это может вызвать сбой кода. Пожалуйста, используйте Int32.TryParse (), так как это безопаснее.

4) Кроме того, вы можете взглянуть на концепцию Url Routing или Url Rewriing, чтобы сделать ваши URL более дружелюбными.

...