【问题标题】:How do I get the current page using PagedDataSource?如何使用 PagedDataSource 获取当前页面?
【发布时间】:2013-02-14 03:23:23
【问题描述】:

我正在使用 Umbraco CMS 并尝试制作下一个和上一个按钮来滚动页面/节点的集合。我已设法使总页数正确,但 CurrentPageIndex 始终显示为 0,如何获取页面在由我的 PagedDataSource 创建的列表中的位置的 CurrentPageIndex 并增加/减少它以移动到下一个页面?

目前我得到的代码是:

Asp.Net:

<div class="detail-paging">
<div class="list-paging-control">

    <p><asp:HyperLink runat="server" id="lnkFirstPage">&lt;&lt;</asp:HyperLink></p>

    <p><asp:HyperLink runat="server" id="lnkPrev" OnServerClick="lnkPrev_Click">&lt;</asp:HyperLink></p>

</div>
<div class="list-paging-numbers">

    <p><asp:Label runat="server" ID="lblCurrentScroll"></asp:Label></p>

</div>
<div class="list-paging-control left-marker">

    <p><asp:HyperLink runat="server" id="lnkNext" OnServerClick="lnkNext_Click">&gt;</asp:HyperLink></p>

    <p><asp:HyperLink runat="server" id="lnkLastPage">&gt;&gt;</asp:HyperLink></p>

</div>
<div class="list-paging-text">
    <p><asp:HyperLink runat="server" ID="lnkViewAll" OnClick="ViewAll_Click">View All</asp:HyperLink></p>
</div>

C#:

    private PagedDataSource paging;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DoDataBind();
    }
}

public int PageNumber
{
    get
    {
        if (ViewState["PageNumber"] != null)
            return Convert.ToInt32(ViewState["PageNumber"]);
        else
            return 0;
    }
    set
    {
        ViewState["PageNumber"] = value;
    }
}

//ALL CODE THAT BINDS DATA FROM UMBRACO
public void DoDataBind()
{
    //Get the parent node.
    Node parent = new Node(1152);

    //Get all the BrandsDetailPage children and order alphabetically.
    IEnumerable<INode> nodes = HelperMethods.GetChildrenOfType(parent, "BrandsDetailPage", true, true).OrderBy(n => n.Name);

    //Pagination
    paging = new PagedDataSource()
    {
        AllowPaging = true,
        DataSource = nodes.ToList(),
        CurrentPageIndex = PageNumber,
        PageSize = 1
    };

    //pageNumber = paging.CurrentPageIndex;

    CreateNavigation();
}

//ALL CODE THAT BINDS DATA FROM UMBRACO

//PAGINATION
public void CreateNavigation()
{
    lblCurrentScroll.Text = PageNumber.ToString();
    lblCurrentScroll.Text += " of ";
    lblCurrentScroll.Text += paging.PageCount;
Node node = new Node(1153);
    string nodeUrl = node.Url;
    lnkViewAll.NavigateUrl = string.Format("{0}?page=All", nodeUrl);
}

protected void lnkPrev_Click(object sender, EventArgs e)
{
    PageNumber--;
    DoDataBind();
}

protected void lnkNext_Click(object sender, EventArgs e)
{
    PageNumber++;
    DoDataBind();
}

【问题讨论】:

  • 你应该使用类似dataSource.PageSize = pageSize; dataSource.CurrentPageIndex = pageNo ?? 0; 的东西来获取你需要的信息,还有你为什么将页面大小设置为 1..?

标签: c# asp.net umbraco


【解决方案1】:

尝试同时使用&lt;asp:ListView /&gt;&lt;asp:DataPager /&gt;。这在大多数情况下简化了分页,并且可以做很多“自动”的事情。请参阅this article 以获取一个很好的示例。

我在我的 Umbraco 项目中成功使用了它。如果您需要,还可以覆盖 Datapager 的一些标准功能。

【讨论】:

    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2013-04-17
    相关资源
    最近更新 更多