65.9K
CodeProject 正在变化。 阅读更多。
Home

导航 Web 用户控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (6投票s)

2009年5月29日

CPOL

3分钟阅读

viewsIcon

35824

downloadIcon

553

导航 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日:初始发布
© . All rights reserved.