【问题标题】:Custom Repeater Control with Paging and Page Navigation Controls具有分页和页面导航控件的自定义中继器控件
【发布时间】:2009-12-24 12:08:29
【问题描述】:

我正在尝试使用 Paging 和随附控件创建客户转发器,例如下一个 上一个按钮。

到目前为止,我的分页数据的自定义中继器工作正常,我也可以让它呈现导航按钮,但我无法将事件分配给导航链接按钮。

这是自定义中继器类:

using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
using System.Collections;
using System;

namespace ASPresentation.Controls 
{
[ToolboxData("<cc:PagedRepeater runat=server></cc:PagedRepeater>")]
public class PagedRepeater : Repeater
{
    public int PageSize { get; set; }
    public int CurrentPageIndex { get; set; }
    public PagedDataSource pagedData = new PagedDataSource();
    LinkButton NextBtn = new LinkButton();
    LinkButton PrevBtn = new LinkButton();

    public bool IsLastPage
    {
        get
        {
            return pagedData.IsLastPage;
        }
    }
    public bool IsFirstPage
    {
        get
        {
            return pagedData.IsFirstPage;
        }
    }

    public override object DataSource
    {
        get
        {
            return base.DataSource;
        }
        set
        {
            pagedData.DataSource = (IEnumerable)value;
        }
    }

    protected void NextButtonClick(object sender, EventArgs e)
    {
        if (!IsLastPage)
        {
            CurrentPageIndex++;
        }
    }

    protected void PrevButtonClick(object sender, EventArgs e)
    {
        if (!IsFirstPage)
        {
            CurrentPageIndex--;
        }
    }

    protected override void OnInit(EventArgs e)
    {
        NextBtn.Text = "Next";
        PrevBtn.Text = "Prev";
        NextBtn.Click += new EventHandler(NextButtonClick);
        PrevBtn.Click += new EventHandler(PrevButtonClick);
        base.OnInit(e);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        base.Controls.Add(PrevBtn);
        base.Controls.Add(NextBtn);
        base.Render(writer);
    }

    public override void DataBind()
    {
        pagedData.AllowPaging = true;
        pagedData.PageSize = PageSize;
        pagedData.CurrentPageIndex = CurrentPageIndex;
        base.DataSource = pagedData;
        base.DataBind();
    }
}
}

有人有什么想法吗?

【问题讨论】:

  • 我们需要查看中继器和按钮标记才能提供帮助。
  • 没有,都是在那个类中生成的。
  • ASP.NET 中的Repeater 和其他网格选项有什么问题?连同页面的 DataPager 控件?
  • 数据网格是标准 asp.net 控件中唯一带有内置分页的控件,并且没有一个带有内置的页面导航控件。

标签: c# asp.net


【解决方案1】:

尝试将此控件设为CompositeControl,而不是从Repeater 继承。在组合内部,实例化您的 Repeater、PagedDataSource、按钮控件和任何其他必要的控件,并通过重写 CreateChildControls 将它们添加到控件树中。您也可以在此时设置事件处理程序。然后,expose the repeater's templates 在合成中。我提供此建议作为一种不同的方法,因为您实际上是在编写复合控件。但是,您不会在渲染时将按钮添加到转发器的模板之一(例如页脚),因此您可能会丢失一些东西。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 2017-05-05
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多