我正在尝试创建一个带有分页和附带控件的客户转发器,例如下一个上一个按钮。
到目前为止,我的自定义转发器的分页数据工作正常,我可以使用它来渲染导航按钮,但我无法将事件分配给Navigation LinkButtons。
这是Custom Repeater类:
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();
}
}
}
有人有任何想法吗?
答案 0 :(得分:0)
尝试将此控件设为CompositeControl,而不是从Repeater继承。在复合内部,实例化您的Repeater,PagedDataSource,按钮控件和任何其他必要的控件,并通过重写CreateChildControls将它们添加到控件树中。此时您也可以设置事件处理程序。然后,复合中的expose the repeater's templates。我提供这个建议作为一种不同的方法,因为你基本上是在编写一个复合控件。但是,在渲染时(例如页脚),您不会将按钮添加到转发器的其中一个模板中,因此您可能会丢失某些内容。