导航 Web 用户控件






4.75/5 (6投票s)
导航 Web 用户控件是一个在运行时创建导航按钮的控件,用户可以使用它来导航数据列表或任何其他控件。
引言
导航 Web 用户控件继承自 WebControl (DLL),在运行时创建导航按钮,以便用户可以导航数据列表或任何其他控件。开发人员可以更改链接之间的对齐方式和分隔符文本,或者显示或隐藏第一个、最后一个、上一个和下一个链接。此控件从其容器获取样式。开发人员只需要PageIndexClick
事件来编写代码(当页面被点击时),并在页面加载时设置分页计数。
此控件解决了什么问题?
此用户控件用于导航数据列表、Repeater 或任何其他包含数据列表且没有内置导航的控件(例如数据网格的内置导航)。当放置在 Ajax 面板中时,它可以在不回发整个页面的情况下工作,并且它将从容器获取其样式。
此控件如何帮助开发人员?
无需为每个数据列表创建分页代码,只需拖放分页用户控件并在每一页处理页面点击事件即可。它具有许多属性以使其更灵活,例如:(ShowCount
, ShowFirst
, ShowLast
, ShowNext
, ShowPrevious
, 每页导航链接数, 总页数, CurrentPageIndex
, 页面链接之间的分隔符, CountText
的前后分隔符)。
如何使用此控件?
1-在页面加载中设置控件设置“布局属性”
示例 1
if (!IsPostBack)
{
PagingControl1.CountAlignment = PagingControl.Alignment.Center;
PagingControl1.CountPosition = PagingControl.Position.Bottom;
PagingControl1.CurrentPageIndex = 1;
PagingControl1.PagesCount = 20;
PagingControl1.LinkSeparatorText = "--";
PagingControl1.LastButtonText = ">>>>";
PagingControl1.FirstButtonText = "<<<<";
PagingControl1.NextButtonText = ">>";
PagingControl1.PreviousButtonText = "<<";
PagingControl1.NavigationLinkesCount = 20;
PagingControl1.ShowCount = false;
PagingControl1.ShowFirst = false;
PagingControl1.ShowLast = false;
PagingControl1.ShowNext = false;
PagingControl1.ShowPrevious = false;
}
示例 2
if (!IsPostBack)
{
PagingControl2.CountAlignment =
CustomWebControlsLib.PagingControl.Alignment.Left;
PagingControl2.AfterCountText = "***";
PagingControl2.BeforeCountText = "***";
PagingControl2.CountPosition =
CustomWebControlsLib.PagingControl.Position.Top; ;
PagingControl2.CurrentPageIndex = 2;
PagingControl2.PagesCount = 20;
PagingControl2.NavigationLinkesCount = 10;
}
示例 3
if (!IsPostBack)
{
PagingControl3.CountAlignment =
CustomWebControlsLib.PagingControl.Alignment.Right;
PagingControl3.CountPosition =
CustomWebControlsLib.PagingControl.Position.Left; ;
PagingControl3.CurrentPageIndex = 3;
PagingControl3.PagesCount = 20;
PagingControl3.NavigationLinkesCount = 15;
}
示例 4
if (!IsPostBack)
{
PagingControl4.CountPosition =
CustomWebControlsLib.PagingControl.Position.Right; ;
PagingControl4.CurrentPageIndex = 4;
PagingControl4.PagesCount = 20;
PagingControl4.NavigationLinkesCount = 5;
}
2-要从此控件获取页面索引,请使用PagingControl1_PageIndexClick(object sender, EventArgs e)
事件

控件属性和事件
属性
属性名称 | 默认值 | 描述 |
LinkSeparatorText |
"|| " |
页面链接之间的分隔符 |
PreviousButtonText |
"Prev " |
上一个按钮文本 |
NextButtonText |
"Next " |
下一个按钮文本 |
FirstButtonText |
"First " |
第一个按钮文本 |
LastButtonText |
"Last " |
最后一个按钮文本 |
SeparatedCountText |
" Of " |
当前页和总页数之间的分隔符,例如 1 of 10 |
BeforeCountText |
"( " |
计数标签的起始分隔符 |
AfterCountText |
") " |
计数标签的结束分隔符 |
CountAlignment |
"Alignment.Center " |
计数对齐方式可以是居中、右对齐、左对齐 |
CountPosition |
"Position.Bottom " |
计数位置可以是顶部、底部、右对齐、左对齐 |
ShowCount |
"true " |
显示/隐藏计数标签 |
ShowFirst |
"true " |
显示/隐藏第一个按钮 |
ShowLast |
"true " |
显示/隐藏最后一个按钮 |
ShowPrevious |
"true " |
显示/隐藏上一个按钮 |
ShowNext |
"true " |
显示/隐藏下一个按钮 |
CurrentPageIndex |
1 |
选定的页面索引 |
PagesCount |
1 |
总页数 |
NavigationLinkesCount |
1 |
每页显示的导航链接数 |
NoRecordsPerPage |
1 |
每页显示的记录数 |
事件
事件名称 | 描述 |
PageIndexClick |
允许开发人员在其网页上处理页面索引点击事件。 只需从 PagingControl1.CurrentPageIndex 属性获取页面索引,并使用此事件在页面索引点击时执行所需的代码。 |
如何使用此控件的示例
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//set control settings
PagingControl1.NoRecordsPerPage = 20;
PagingControl1.CurrentPageIndex = 1;
PagingControl1.NavigationLinkesCount = 12;
//Get Items data
ViewState["_Items"] = GetItems();
ViewPage(PagingControl1.CurrentPageIndex);
}
}
protected void PagingControl1_PageIndexClick(object sender, EventArgs e)
{
ViewPage(PagingControl1.CurrentPageIndex);
} #endregion
private void ViewPage(int PageNo)
{
if (ViewState["_Items"] != null)
{
PagedDataSource objPds = new PagedDataSource();
DataTable dt = (DataTable)ViewState["_Items"];
objPds.DataSource = new DataView(dt);
objPds.AllowPaging = true;
objPds.PageSize = PagingControl1.NoRecordsPerPage;
objPds.CurrentPageIndex = PageNo - 1;
dlstItems.DataSource = objPds;
dlstItems.DataBind();
double d = Math.Ceiling(Convert.ToDouble(dt.Rows.Count) /
PagingControl1.NoRecordsPerPage);
PagingControl1.PagesCount = Convert.ToInt32(d);
dlstItems.Visible = true;
PagingControl1.Visible = true;
lblResultMessage.Visible = false;
}
else
{
dlstItems.Visible = false;
lblResultMessage.Visible = true;
PagingControl1.Visible = false;
lblResultMessage.Text = "No Result";
}
}
private DataTable GetItems()
{
DataTable dt = new DataTable();
dt.Columns.Add("ItemId");
dt.Columns.Add("ItemName");
for (int i = 1; i <= 400; i++)
{
DataRow dr = dt.NewRow();
dr["ItemId"] = i.ToString();
dr["ItemName"] = "Item" + i;
dt.Rows.Add(dr);
}
return dt;
} #endregion
代码是如何工作的?
设置当前页索引和总页数后,系统将自动计算第一页的页码。在链接示例中,如果我有 20 页,每页显示 5 个链接,如果选择的索引是 12,则页面中的第一个链接将是 11 (12-(12%5) +1)
(
if ((CurrentPageIndex % NavigationLinkesCount == 0))
{
_CurrentStartPage = (CurrentPageIndex - NavigationLinkesCount) + 1;
}
else
{
_CurrentStartPage = (CurrentPageIndex - (CurrentPageIndex % NavigationLinkesCount)) + 1;
}
所有属性值都保存在视图状态中,以便在回发时获取其值。
在加载事件中,页面链接将根据属性值在运行时绘制,并在每个链接按钮上附加lbtn.Click += LinkedButtonClick
事件。根据按钮名称,该事件将处理点击:第一个将当前页设置为 1,上一个将减去 1,下一个将加 1,最后一个将设置为总页数,其他按钮将当前索引设置为其文本。之后,控件将被重新绘制。
if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnFirst") > -1))
{
CurrentPageIndex = 1;
}
else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnPrevPage") > -1))
{
if ((CurrentPageIndex > 1))
{
CurrentPageIndex = CurrentPageIndex - 1;
}
}
else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnNextPage") > -1))
{
if ((CurrentPageIndex < PagesCount))
{
CurrentPageIndex = CurrentPageIndex + 1;
}
}
else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnLast") > -1))
{
CurrentPageIndex = PagesCount;
}
else
{
CurrentPageIndex = Convert.ToInt32(lbtn.Text);
}
PaintWithClickSelected();
}
方法 | 描述 |
GeneratePaging |
根据控件属性生成链接并将其放在占位符中 |
SelectPage |
更新计数标签并禁用当前页面索引点击 |
PaintWithoutClickSelected |
生成分页链接并更新计数表,无需触发PageIndexClick 事件(在页面加载中调用此方法) |
PaintWithClickSelected |
生成分页链接并触发页面点击事件(在链接按钮点击中调用此方法) |
下载并运行附加的源代码以获取更多详细信息。
历史
- 2009年5月29日:初始发布