您的位置:首页 > 编程语言 > ASP

一个ASP.NET的分页控件

2012-04-24 10:19 393 查看
public class ucDataPager:CompositeControl,INamingContainer
{
private LinkButton lkbtnFirstLevel;
private LinkButton lkbtnPreLevel;
private LinkButton lkbtnLastLevel;
private LinkButton lkbtnNextLevel;private List<LinkButton> lstPages;

/// <summary>
/// the key of the Button Click event
/// </summary>
private static readonly object ButtonPageClickObject = new object();

/// <summary>
///
/// </summary>
public ucDataPager()
{
}

/// <summary>
///
/// </summary>
/// <param name="pageCount"></param>
/// <param name="pageSize"></param>
public ucDataPager(int pageCount, int pageSize)
{
PageSize = pageSize;
ViewState["PageCount"] = pageCount;
}

/// <summary>
/// the current page index
/// </summary>
public int PageIndex
{
set
{
if (value < 0)
{
return;
}
if (value > PageCount - 1)
{
ViewState["PageIndex"] = PageCount - 1;
return;
}
ViewState["PageIndex"] = value;

}
get
{
return ViewState["PageIndex"] == null ? 0 : Convert.ToInt32(ViewState["PageIndex"]);
}
}

/// <summary>
/// The page count of the records
/// </summary>
public int PageCount
{
set
{
if (value < 0)
{
return;
}
ViewState["PageCount"] = value;
if (value < PageIndex + 1)
{
PageIndex = value - 1;
}
}
get
{
return ViewState["PageCount"] == null ? -1 : Convert.ToInt32(ViewState["PageCount"]);
}
}

/// <summary>
/// the count of the button to show
/// </summary>
public int PageSize
{
set
{
if (value <= 0)
{
return;
}
ViewState["PageSize"] = value;
}
get
{
return ViewState["PageSize"] == null ? 10 : Convert.ToInt32(ViewState["PageSize"]);
}
}
/// <summary>
/// Create child controls
/// </summary>
protected override void CreateChildControls()
{
this.Controls.Clear();
if (PageCount <= 0)
{
return;
}
lkbtnFirstLevel = new LinkButton();
lkbtnFirstLevel.CausesValidation = false;
lkbtnFirstLevel.Text = "<<";
lkbtnFirstLevel.CommandName = "First";
this.Controls.Add(lkbtnFirstLevel);

lkbtnLastLevel = new LinkButton();
lkbtnLastLevel.CausesValidation = false;
lkbtnLastLevel.Text = ">>";
lkbtnLastLevel.CommandName = "Last";
this.Controls.Add(lkbtnLastLevel);

lkbtnPreLevel = new LinkButton();
lkbtnPreLevel.CausesValidation = false;
lkbtnPreLevel.Text = "...";
lkbtnPreLevel.CommandName = "Pre";
this.Controls.Add(lkbtnPreLevel);

lkbtnNextLevel = new LinkButton();
lkbtnNextLevel.CausesValidation = false;
lkbtnNextLevel.Text = "...";
lkbtnNextLevel.CommandName = "Next";
this.Controls.Add(lkbtnNextLevel);

lstPages = new List<LinkButton>();
for (int i =(PageIndex/PageSize)*PageSize + 1; i <= PageCount && i <= (PageIndex/PageSize)*PageSize+PageSize; i++)
{
LinkButton lkbtnPage = new LinkButton();
lkbtnPage.CausesValidation = false;
lkbtnPage.Text = i.ToString();
lkbtnPage.CommandName = "NewPage";
lstPages.Add(lkbtnPage);
this.Controls.Add(lkbtnPage);
}
}

/// <summary>
/// Render controls
/// </summary>
/// <param name="writer"></param>
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (lstPages == null)
{
CreateChildControls();
}
if (lstPages == null)
{
return;
}
if (lstPages.Count <= 1 && PageIndex == 0)
{
return;
}
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
if (PageIndex / PageSize == 0)
{
lkbtnFirstLevel.Visible = false;
lkbtnPreLevel.Visible = false;
}
else
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
lkbtnFirstLevel.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
lkbtnPreLevel.RenderControl(writer);
writer.RenderEndTag();
}
foreach (LinkButton lkbtn in lstPages)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (lkbtn.Text == (PageIndex + 1).ToString())
{
lkbtn.Enabled = false;
}
lkbtn.RenderControl(writer);
writer.RenderEndTag();
}

if (PageIndex/PageSize == (PageCount - 1)/PageSize)
{
lkbtnLastLevel.Visible = false;
lkbtnNextLevel.Visible = false;
}
else
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
lkbtnNextLevel.RenderControl(writer);
writer.RenderEndTag();

writer.RenderBeginTag(HtmlTextWriterTag.Td);
lkbtnLastLevel.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderEndTag();
writer.RenderEndTag();
}

/// <summary>
/// raise command
/// </summary>
/// <param name="source"></param>
/// <param name="args"></param>
/// <returns></returns>
protected override bool OnBubbleEvent(object source, EventArgs args)
{
bool handled = false;
if (args is CommandEventArgs)
{
CommandEventArgs e = (CommandEventArgs)args;
if (e.CommandName == "First")
{
PageIndex = 0;
MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex);
OnButtonPageClick(myArgs);
CreateChildControls();
handled = true;
}
if (e.CommandName == "Last")
{
PageIndex = ((PageCount - 1)/PageSize)*PageSize;
MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex);
OnButtonPageClick(myArgs);
CreateChildControls();
handled = true;
}
if (e.CommandName == "Pre")
{
PageIndex = (PageIndex / PageSize - 1) * PageSize;
MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex);
OnButtonPageClick(myArgs);
CreateChildControls();
handled = true;
}
if (e.CommandName == "Next")
{
PageIndex = (PageIndex / PageSize + 1) * PageSize;
MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex);
OnButtonPageClick(myArgs);
CreateChildControls();
handled = true;
}
if (e.CommandName == "NewPage")
{
int pageIndex = Convert.ToInt32(((LinkButton)source).Text) - 1;
PageIndex = pageIndex;
CreateChildControls();
MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex);
OnButtonPageClick(myArgs);
handled = true;
}
}
this.RaiseBubbleEvent(source, args);
return handled;
}

/// <summary>
///
/// </summary>
public event MyDataPagerEventHandler ButtonPageClick
{
add
{
base.Events.AddHandler(ButtonPageClickObject, value);
}
remove
{
base.Events.RemoveHandler(ButtonPageClickObject, value);
}
}

/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected virtual void OnButtonPageClick(MyDataPagerEventArgs e)
{
MyDataPagerEventHandler ButtonPageClickHandler = (MyDataPagerEventHandler)Events[ButtonPageClickObject];
if (ButtonPageClickHandler != null)
{
ButtonPageClickHandler(this, e);
}
}
}

public delegate void MyDataPagerEventHandler(object sender,MyDataPagerEventArgs e);

public class MyDataPagerEventArgs : EventArgs
{
public MyDataPagerEventArgs(int newPageIndex)
{
this.NewPageIndex = newPageIndex;
}
public int NewPageIndex
{
set;
get;
}
}


用法如下,要与GridView配合使用

private void BindData()
{
DataTable dtResult = .....
if (dtResult.Rows.Count > 0)
{
gvResult.PageSize = 10;
gvResult.DataSource = dtResult;
gvResult.DataBind();
ucDataPagerHeader.PageCount = gvResult.PageCount;
ucDataPagerHeader.PageIndex = gvResult.PageIndex;
}
}


protected void ucDataPagerHeader_ButtonPageClick(object sender, MyDataPagerEventArgs e)
{
try
{
gvResult.PageIndex = e.NewPageIndex;
BindData();
}
catch
{
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: