[原]asp.net自定义分页用户控件
自定义分页用户控件
控件界面
--------------------------------------------------------
UserControl后台相关代码
注册事件


// Event fired when user click button on user control
public event System.EventHandler ButtonClicked;
触发事件


if (ButtonClicked != null)
{
ButtonClicked(this, EventArgs.Empty);
}
绑定下拉框中的总页数


/// <summary>
/// use this property to bind the page count of DropDownList
/// </summary>
public int SelectedIndex
{
get { return this.ddlPageCount.SelectedIndex; }
set {
// page count
int itemCount = 0;
// calculate the page count
if (pageCount > 0 && pageRows > 0)
{
double totalCount = pageCount;
double rows = pageRows;
itemCount = Convert.ToInt32(Math.Ceiling(totalCount / rows));
itemCount = (itemCount == 0) ? 1 : itemCount;
}
if (itemCount != this.ddlPageCount.Items.Count)
{
BindDDL(itemCount, pageRows);
}
this.ddlPageCount.Enabled = (this.ddlPageCount.Items.Count > 0);
ddlPageCount.SelectedIndex = value;
if (this.ddlPageCount.Items.Count <= 1)
{
this.lbnPrevious.Enabled = false;
this.lbnNext.Enabled = false;
}
else if (this.ddlPageCount.SelectedIndex == 0)
{
this.lbnPrevious.Enabled = false;
this.lbnNext.Enabled = true;
}
else if (this.ddlPageCount.SelectedIndex == this.ddlPageCount.Items.Count - 1)
{
this.lbnPrevious.Enabled = true;
this.lbnNext.Enabled = false;
}
}
}


/// <summary>
/// bind the page count to the DropDownList
/// </summary>
/// <param name="itemCount">page count</param>
/// <param name="pageRows">how many rows in one page</param>
private void BindDDL(int itemCount, int pageRows)
{
while (this.ddlPageCount.Items.Count < itemCount)
{
int index = this.ddlPageCount.Items.Count;
int item = index + 1;
this.ddlPageCount.Items.Insert(index, item.ToString());
}
while (this.ddlPageCount.Items.Count > itemCount)
{
int index = this.ddlPageCount.Items.Count - 1;
this.ddlPageCount.Items.RemoveAt(index);
}
}
选择页


/// <summary>
/// previous page
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbnPrevious_Click(object sender, System.EventArgs e)
{
if (this.ddlPageCount.Items.Count == 0)
{
return;
}
if (this.ddlPageCount.SelectedIndex > 0)
{
this.ddlPageCount.SelectedIndex -= 1;
this.lbnPrevious.Enabled = (this.ddlPageCount.SelectedIndex != 0);
this.lbnNext.Enabled = (currentPage != this.ddlPageCount.Items.Count);
}
currentPage = this.ddlPageCount.SelectedIndex + 1;
if (ButtonClicked != null)
{
ButtonClicked(this, EventArgs.Empty);
}
}
/// <summary>
/// next page
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbnNext_Click(object sender, System.EventArgs e)
{
if (this.ddlPageCount.Items.Count == 0)
{
return;
}
if (this.ddlPageCount.SelectedIndex < this.ddlPageCount.Items.Count - 1)
{
this.ddlPageCount.SelectedIndex += 1;
this.lbnPrevious.Enabled = (this.ddlPageCount.SelectedIndex != 0);
this.lbnNext.Enabled = (this.ddlPageCount.SelectedIndex != this.ddlPageCount.Items.Count - 1);
}
currentPage = this.ddlPageCount.SelectedIndex + 1;
if (ButtonClicked != null)
{
ButtonClicked(this, EventArgs.Empty);
}
}
/// <summary>
/// go to the destination page
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ddlPageCount_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (this.ddlPageCount.Items.Count == 0)
{
return;
}
currentPage = this.ddlPageCount.SelectedIndex + 1;
this.lbnPrevious.Enabled = (currentPage != 1);
this.lbnNext.Enabled = (currentPage != this.ddlPageCount.Items.Count);
if (ButtonClicked != null)
{
ButtonClicked(this, EventArgs.Empty);
}
}
-----------------------------------------------------
主页面相关代码
查询按钮


/// <summary>
/// query data
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnQuery_Click(object sender, System.EventArgs e)
{
int count = 0;
if (txtCondition.Text.Trim().Length > 0)
{
count = int.Parse(txtCondition.Text.Trim());
}
// initial parameters
DataPager dpPager = ((DataPager)this.Page.FindControl("DataPager1"));
dpPager.CurrentPage = 1;
dpPager.PageCount = count; // retrived data rows
dpPager.PageRows = 14; // how many rows in one page
dpPager.SelectedIndex = 0;
//bind datagrid
}
绑定用户控件事件
前台




<%@ Register TagPrefix="uc1" TagName="DataPager" Src="DataPager.ascx" %>
<uc1:DataPager id="DataPager1" runat="server" OnButtonClicked="DataPager_Changed"></uc1:DataPager>
后台


/// <summary>
/// fire to bind data with selected page
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DataPager_Changed(object sender, System.EventArgs e)
{
DataPager dpPager = (sender as DataPager);
int currentPage = dpPager.CurrentPage;
//bind datagrid
}