代码:/Files/zhuqil/DataPagerExtenderSample.zip
介绍:
ASP.NET3.5中包含了一个非常有用的组件 - DataPager控件.这个控件允许你对任何实现了
IPageableItemContainer接口的控件的数据进行分页,例如普遍使用的ListView控件.
在
ASP.NET 4.0 web表单开发中新增了另外一个非常有用的功能:URL Routing,第一次看到是在ASP.NET MVC中,这个路由引擎允许你构建一个有规则的用户友好的URLs,这比URL重写更容易实现.
可问题是这两种功能不能同时用,
DataPager也有其它几个限制
•在最新的ASP.NET 4.0 beta 2中,当
QueryStringField属性被指定后,
DataPager根本不能使用.这是一个已经被找出来的bug,在vs2010最终版中才会被处理.但是对于前期的使用者,这仍然是个问题.
•DataPager只支持查询字符串或者分页的javascript的postback.你不能让当前页的索引来指定。
•DataPager呈现是可以自定义自己的界面,但是不容易实现,特别是有关CSS样式.
解决方案:
我的解决方案是写自己的一个分页控件.这个控件像DataPager一样使用
IPageableItemContainer接口,但是用了生成不同的用户界面生成的方法.
控件使用标准的
HyperLink控件,通过配置设置
NavigateUrl属性,如果没有设置,HyperLink控件将会隐藏或者无效.
这个控件继承了
IPageableItemContainer.
DataPagerExtender控件的属性:
TargetControlID
- 目标分页控件的ID
PageSize
- 一页的大小 - 默认为10
PageIndexSource
- 这个属性能得到当前页码索引. 可以是RouteParameter 也可以是
QueryString
CollectionKey - 设置查询字符串字段或路线参数名称(见上文),以获得当前页的索引的
InactiveLinkMode-指定当一个link被设置为inactive如何表现(也就是说:"previous"link是为第一页).默认值是
Ignore,这种情况下,这个link是被忽视的 和保持不变.当设置为
Hide时,这个特别的link是隐藏的.当设置为
Disable,这个控件是无效的.
FirstLinkID
, PreviousLinkID
, NextLinkID
, LastLinkID -
这些属性指定导航的
HyperLink控件的ID,如果你给这些属性空值.它将会被忽略.这样,如果你只想要 "previous" 和"next" links,你只要设定
PreviousLinkID
和NextLinkID
使用DataPagerExtender控件
首先,用通常的方式显示你的数据在一个
ListView控件上面.然后,添加4个
HyperLink控件分别导向第一页, 上一页, 下一页, 和最后一页
代码
< LayoutTemplate >
< table >
< thead >
< tr >
< th > ProductID </ th >
< th > ProductName </ th >
< th > UnitPrice </ th >
</ tr >
</ thead >
< tbody >
< asp:PlaceHolder ID ="itemPlaceholder" runat ="server" />
</ tbody >
< tfoot >
< tr >
< td colspan ="3" >
< div style ="float: left" >
< asp:HyperLink ID ="LinkFirst" runat ="server" Text ="<< first" />
< asp:HyperLink ID ="LinkPrevious" runat ="server" Text ="< previous" />
</ div >
< div style ="float: right" >
< asp:HyperLink ID ="LinkNext" runat ="server" Text ="next >" />
< asp:HyperLink ID ="LinkLast" runat ="server" Text ="last >>" />
</ div >
</ td >
</ tr >
</ tfoot >
</ LayoutTemplate >
< ItemTemplate >
< tr >
< td >
< asp:Label runat ="server" Text ='<%# Eval("ProductID") % > ' />
</ td >
< td >
< asp:Label runat ="server" Text ='<%# Eval("ProductName") % > ' />
</ td >
< td >
< asp:Label runat ="server" Text ='<%# Eval("UnitPrice") % > ' />
</ td >
</ tr >
</ ItemTemplate >
</ asp:ListView >
< asp:LinqDataSource ID ="LinqDataSource1" runat ="server" TableName ="Products"
ContextTypeName ="NorthwindDataContext" OrderBy ="ProductName"
Select ="new (ProductID, ProductName, UnitPrice)" />
然后添加DataPagerExtender (在我的案例,我以my为前缀注册它,这里我使用了查询字符串的方式)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
PageIndexSource ="QueryString" CollectionKey ="Page"
FirstLinkID ="LinkFirst" LastLinkID ="LinkLast"
NextLinkID ="LinkNext" PreviousLinkID ="LinkPrevious" />
使用DataPagerExtender的路由
首先,你必须稍微修改上面的控件的引用:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
PageIndexSource ="RouteParameter" CollectionKey ="Page"
FirstLinkID ="LinkFirst" LastLinkID ="LinkLast"
NextLinkID ="LinkNext" PreviousLinkID ="LinkPrevious" />
然后,你必须创建一些路由路线,它包含了{Page}的线路参数(可能会更多).这个参数是必要的,默认情况下是‘1’,因此,没有明确的规定第一页的显示.
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
RouteTable.Routes.MapPageRoute( " PagedProducts " , // route name
" pagedproducts/{Page} " , // path
" ~/Products2.aspx " , // internal handler
false , // do not check physical file
new RouteValueDictionary { { " Page " , " 1 " } }); // default to first page
}
限制:
相比原始的DataPager控件,我的DataPagerExtender 有几个限制:
•它不支持分页回发。
•只有下一页/上一页等,分页风格,没有一列的数字来支持跳页的功能。
•没有很明显的方式来显示分页信息.
原文地址:http://www.codeproject.com/KB/aspnet/paging_with_url_routing.aspx
(全文完)
以下为广告部分
您部署的HTTPS网站安全吗?
如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!
快速了解HTTPS网站安全情况。
安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。
安装部署SSL证书变得更方便。
SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。
让服务器远离SSL证书漏洞侵扰
TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。