如何为 ASP.NET 应用程序创建定制的寻呼机

分享于 

8分钟阅读

Web开发

  繁體

Sample Image

介绍

一旦我开始使用 DataGrid web控件,我就不能选择使用下一个/后台按钮或者页码。 如果我想用下拉列表,我根本做不到 !

所以,我已经控制了我的手,并决定开发一个分页控制来支持我的所有需求。

结果是很简单的使用控件库- 将它放在窗体上,并将它的绑定到 DataGrid,并将它的余部分。 但另一方面它是非常强大和灵活的。

我开发的库包含三个寻呼机:

  • PageNumbersPager - 显示可以点击的页码。
  • NextBackPager - 允许在下一个或者后面导航。
  • DropDownListPage - 允许通过从下拉列表中选择页来更改页码。

控制库还实现了一个简单的框架,允许你添加自己的寻呼机,以便与页面上的其他寻呼机通信。 ( 我做到了,我将能够在同一页面上放置许多呼叫器,并允许他们互相同步。)

我不会描述所有寻呼机的所有属性,我将简短简短地介绍它们。 要查看所有特性,请下载示例代码并检查它。

在我描述如何构建控件库之前: 附加的源代码包含一个名为without的子文件夹,它的中包含三个。 我打算在这个库中也包含多使用菜单。 对于这一次,只需忽略这些类。

现在要做的是:

它如何工作

控制库相当简单。 它包含以下类:

  • PagerBase 类- 继承自 WebControl,并用作所有页导航控件的基类。 此类是抽象的( 它不包含任何渲染方法),实现所有常用的分页函数。
  • PostBackEventHandlerPager 类- 派生自 PagerBase 类并实现 IPostbackEventHandler 接口,允许控件将事件引发到它的容器的( 在我们的例子中- 包含页面) 中的另一抽象类。
  • <PagerType>Pager 类( PageNumbersPagerDropDownListPagerNextBackPager ) - 从 PagerBase 类或者 PostBackEventHandlerPager 类派生的类。 这些控件将放置在页面上。
  • PageNumberChanged 委托- 用于实现 PageNumberChaned 事件的委托。
  • PageNumberChangeEventArgs 类- 保存 PageNumberChanged 事件属性的类。

我假设你要问的第一个问题是: 为什么他把 PagerBasePostBackEventHandlerPager 分开,而不是在一个类中做。 原因是允许希望扩展这里控件的开发人员选择是否允许基类处理回发事件,如单击事件( 此类控件的示例是在单击控件时更改页号的NextBackPager ),或者希望控件自己执行该操作。 如果你不理解这个解释,只需查看代码,看看 NextBackPagerDropDownListPager 控件之间的区别。

关于这些类的一点解释:

PagerBase 类包含页导航的所有公共属性:

  • DataGrid 属性- 获取/设置要绑定到的DataGrid 控件。
  • PageCount 属性- 获取/设置( 仅在未绑定模式下允许设置)的页数。
  • CurrentPageNumber 属性- 当前页码。
  • RecieveSyncCauseSync 属性- 允许控件与同一页面上的其他寻呼机同步

RecieveSyncCauseSync 属性用于支持页上有更多页码的情况,并且希望它们同步到每个页面。 绑定模式( 当寻呼机绑定到同一网格时) 中不需要这些属性,因为它们绑定到同一个网格会导致它们同步。 但是,如果在未绑定模式下工作,则可以决定每个控件是否通知其他寻呼程序有关页面更改( CauseSync=true ) 以及控件是否应响应来自其他控件的同步信号( RecieveSync=true )。

此类还包括两个用于派生类的方法:

  • GetPostBackHrefString 方法- 返回 __dopostback() 函数的字符串,使用正确的参数捕获 postback 事件。
  • OnPageNumberChanged 方法- 实现由于页面更改事件而需要完成的所有操作。

PostBackEventHandlerPager 类包含一个方法,即 IPostbackEventHandler 接口实现。 它只创建一个新的PageChangedEventArgs 对象并调用 OnPageNumberChanged 方法。

<PagerStyle>Pager 控件添加只与它们的(。例如 NextBackPager 控件实现 TextPagingDirection 属性) 相关的自定义属性。

如何使用这里代码创建自己的页导航

按照以下步骤实现你自己的集成到我的控制库中的寻呼机:

  • 创建从 PagerBase 或者 PostBackEventHandlerPager 类派生的类。
  • 实现所需的任何自定义属性。
  • 实现渲染方法。
  • 通过重写 SaveViewStateLoadViewState 方法( 但不要忘记调用基本方法) 来管理自定义属性的状态。
  • 如果从 PagerBase 派生,将 PageNumberChange 提升到适当的位置( 在DropDownListPager示例中,它是在 RaisePostDataChangedEvent 方法中完成)。

如何使用这些控件

  • 在工具箱( 我想你应该知道怎么做) 中包含控件。
  • 在页面上放置适当的寻呼机。
  • 绑定到 OnInit 方法- 将控件绑定到适当的DataGrid的代码。
  • 对于未绑定页导航- 实现 PageNumberChanged 事件以执行适当的操作。

以下代码说明如何设置控件属性的DataGrid:

overrideprotectedvoid OnInit(EventArgs e)
{//// CODEGEN: This call is required by the ASP.NET Web Form Designer.// InitializeComponent();
 PageNumbersPager1.DataGrid = DataGrid1;
 base.OnInit(e);
}

我这样做的原因,而不是使用可以视化设计器的属性窗口非常简单: 我没有成功告诉设计器在实现事件( 如果你知道怎么做,请让我知道我在找什么) 时将这里代码添加到 InitializeComponent 方法中。

最终单词

我希望你能够找到这个控制库,我相信你会发现有许多事情可以添加( 其他寻呼机,扩展现有的,等等 )。 你可以随意使用这个库的任何目的( 我不管你是否尝试销售它。)。 :- ) )。

历史记录

  • 30 2004年月 - 更新的下载

相关文章