云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 创建用于ASPNET分页的控件

创建用于ASPNET分页的控件

  • 62 次阅读
  • 3 次下载
  • 2026/4/23 19:41:14

隔开的字符串。实际上,这种匹配是在窗体的子控件和用冒号分隔开的字符串(如 SqlPager1:First)的第一个标记之间进行的。由于分页程序是窗体的子控件,因此匹配时会成功,分页程序获取单击事件。如果您认为这种解释不够充分或者令人费解,只要下载 SqlPager 控件的源代码,删除 INamingContainer 标记接口并进行重新编译即可。您将看到分页程序能够返回,但不能内部处理单击事件。

INamingContainer 接口是一个不具备方法的标记接口,其实现只需在类声明中指定名称即可,无需进行任何其他操作。

复合控件的另一个重要方面是,它们通常不需要自定义逻辑来进行显示。复合控件的显示遵循其组成控件的显示。生成复合控件时,通常无需覆盖 Render 方法。

控件的 SqlPager 树由一个包含两个单元格的单行表格组成。该表格继承了分页程序的大部分可视设置,如前景颜色和背景颜色、边框、字体信息和宽度等。第一个单元格包含导航条,其结构取决于 PagerStyle 属性的值。如果分页程序的样式为 NextPrev,则导航条将由四个 VCR 式的按钮组成。否则,它将由一个下拉列表组成。

private void BuildControlHierarchy() {

// 生成环境表格(一行,两个单元格) Table t = new Table();

t.Font.Name = this.Font.Name; t.Font.Size = this.Font.Size; t.BorderStyle = this.BorderStyle; t.BorderWidth = this.BorderWidth; t.BorderColor = this.BorderColor; t.Width = this.Width; t.Height = this.Height;

t.BackColor = this.BackColor; t.ForeColor = this.ForeColor;

// 生成表格中的行

TableRow row = new TableRow(); t.Rows.Add(row);

// 生成带有导航条的单元格

TableCell cellNavBar = new TableCell(); if (PagerStyle == this.PagerStyle.NextPrev) BuildNextPrevUI(cellNavBar); else

BuildNumericPagesUI(cellNavBar); row.Cells.Add(cellNavBar);

// 生成带有页面索引的单元格

TableCell cellPageDesc = new TableCell();

cellPageDesc.HorizontalAlign = HorizontalAlign.Right; BuildCurrentPage(cellPageDesc); row.Cells.Add(cellPageDesc);

// 将表格添加到控件树 this.Controls.Add(t); }

将各个控件添加到正确的 Controls 集合对于分页程序的正确显示极其重要。最外层的表格必须添加到分页程序的 Controls 集合中。链接按钮和下拉列表必须添加到相应表格单元格的 Controls 集合中。

下面给出了用来生成链接按钮导航条的代码。每个按钮都显示有一个 Webdings 字符,可以根据需要禁用,并被绑定到内部的 Click 事件处理程序。 private void BuildNextPrevUI(TableCell cell) {

bool isValidPage = ((CurrentPageIndex >=0) &&

(CurrentPageIndex <= TotalPages-1)); bool canMoveBack = (CurrentPageIndex>0);

bool canMoveForward = (CurrentPageIndex

// 显示 << 按钮

LinkButton first = new LinkButton(); first.ID = \

first.Click += new EventHandler(first_Click); first.Font.Name = \

first.Font.Size = FontUnit.Medium; first.ForeColor = ForeColor; first.ToolTip = \第一页\ first.Text = \

first.Enabled = isValidPage && canMoveBack; cell.Controls.Add(first); : }

分页程序的另一种样式(在下拉列表中列出数字页面)的生成方法如下所示: private void BuildNumericPagesUI(TableCell cell) {

// 显示一个下拉列表

DropDownList pageList = new DropDownList(); pageList.ID = \ pageList.AutoPostBack = true;

pageList.SelectedIndexChanged += new EventHandler(PageList_Click); pageList.Font.Name = this.Font.Name; pageList.Font.Size = Font.Size; pageList.ForeColor = ForeColor;

if (TotalPages <=0 || CurrentPageIndex == -1) {

pageList.Items.Add(\ pageList.Enabled = false; pageList.SelectedIndex = 0; }

else // 填充列表 {

for(int i=1; i<=TotalPages; i++) {

ListItem item = new ListItem(i.ToString(), (i-1).ToString()); pageList.Items.Add(item); }

pageList.SelectedIndex = CurrentPageIndex; } }

所有事件处理程序(Click 和 SelectedIndexChanged)最终都会更改当前显示的页面。这两种方法都会调用一个公用的 private 方法 GoToPage。 private void first_Click(object sender, EventArgs e) {

GoToPage(0); }

private void PageList_Click(object sender, EventArgs e) {

DropDownList pageList = (DropDownList) sender;

int pageIndex = Convert.ToInt32(pageList.SelectedItem.Value); GoToPage(pageIndex); }

private void GoToPage(int pageIndex) {

// 准备事件数据

PageChangedEventArgs e = new PageChangedEventArgs();

e.OldPageIndex = CurrentPageIndex; e.NewPageIndex = pageIndex;

// 更新当前的索引

CurrentPageIndex = pageIndex;

// 启动页面更改事件 OnPageIndexChanged(e);

// 绑定新数据 DataBind(); }

其他导航按钮的处理程序与 first_Click 的区别仅在于它们传递给 GoToPage 方法的页码不同。GoToPage 方法负责处理 PageIndexChanged 事件,并负责启动数据绑定过程。它准备事件数据(旧页面和新页面索引)并触发事件。GoToPage 被定义为 private,但是可以使用 CurrentPageIndex 属性通过编程的方式更改显示的页面。

public int CurrentPageIndex {

get {return Convert.ToInt32(ViewState[\ set {ViewState[\}

与表 1 中所列的所有属性一样,CurrentPageIndex 属性的实现方法也相当简单。它将其内容保存到 ViewState 中并从中进行还原。在数据绑定过程中,会验证和使用页面索引。 数据绑定过程

DataBind 方法是所有 ASP.NET 控件公用的,对于数据绑定控件来说,它将触发用户界面的刷新以反映新数据。SqlPager 控件根据 SelectCommand 和 ConnectionString 属性的值,使用此方法启动数据检索操作。不言而喻,如果这些属性中的任何一个为空,该过程将终止。同样,如果合作者控件不存在,数据绑定过程将被取消。要查找合作者控件,DataBind 方法使用 Page 类中的 FindControl 函数。由此可见,合作者控件必须为主窗体的直接子控件。 进行分页显示的控件不能为任意的 ASP.NET 服务器控件。它必须为列表控件或基本数据列表控件。更一般来说,合作者控件必须具有 DataSource 属性并实现 DataBind 方法。可能进行分页的控件实际上只需要满足这些要求。Microsoft? .NET Framework 中所有继承 ListControl 或 BaseDataList 的控件都满足第一个要求;而所有 Web 控件通过设计都满足 DataBind 要求。

搜索更多关于: 创建用于ASPNET分页的控件 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

隔开的字符串。实际上,这种匹配是在窗体的子控件和用冒号分隔开的字符串(如 SqlPager1:First)的第一个标记之间进行的。由于分页程序是窗体的子控件,因此匹配时会成功,分页程序获取单击事件。如果您认为这种解释不够充分或者令人费解,只要下载 SqlPager 控件的源代码,删除 INamingContainer 标记接口并进行重新编译即可。您将看到分页程序能够返回,但不能内部处理单击事件。 INamingContainer 接口是一个不具备方法的标记接口,其实现只需在类声明中指定名称即可,无需进行任何其他操作。 复合控件的另一个重要方面是,它们通常不需要自定义逻辑来进行显示。复合控件的显示遵循其组成控件的显示。生成复合控件时,通常无需覆盖 Render 方法。 控件的 SqlPager 树由一个包含两个单元格的单行表格组成。该表格继承

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com