2009-12-24 164 views
0

我试图创建一个客户中继器分页和伴随控制例如, Next Prev按钮。自定义中继器控制分页和页面导航控件

到目前为止,我已经有了分页数据的自定义转发器,并且我可以让它呈现导航按钮,但我无法将事件分配给导航LinkBut​​tons。

这里的自定义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

我们需要查看中继器和按钮标记以提供帮助。 – Oded 2009-12-24 12:12:12

+0

没有任何,它的全部在该类中生成。 – Morgeh 2009-12-24 13:27:49

+0

ASP.NET中的Repeater和其他网格选项有什么问题?随着页面的DataPager控件? – 2009-12-24 15:53:24

回答

0

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