学习PetShop3.0(3)查询及simplePager控件

学习PetShop3.03)查询及simplePager控件

1.Serach功能

自定义控件NavBar.ascx中有个form申明成get方法,自动将input输入的加入到查询字符串后。actionsearch.aspxform里有一个链接,点击转到页面search..aspxsearch..aspx包含一个自定义控件simplePager.ascxsimplePager.ascx初始化时调用OnLoad事件,OnLoad事件调用SetPage方法,触发simplePager.ascx中重写的OnPageIndexChanged事件,就是这一次访问数据库,把所有符合条件的数据都查询出来,然后利用分页,显示部分数据。

search..aspx页面上定义OnPageIndexChanged事件的接收方法。有两种定义方法:在search..aspxsimplePager.ascx控件中定义OnPageIndexChanged事件,或者在search..aspx.cs中定义PageChanged事件。

在这里微软利用cache来改进查询功能。利用生成的查询字符串作为cachekey,查询结果作为查询结果。


    剩下的事情就都交给simplePager.ascx控件来完成了。


2.simplePager.ascx
together导出的类图可以看出simplePage继承了Repeater。但是Repeater不具有分页功能,所以simplePage添加了相关分页功能。


    分页功能主要是在OnDataBinding方法中完成。当页面执行绑定时,触发simplePageOnDataBinding事件。第一次取出所有的数据,然后根据
CurrentPageIndex(当前页),pageSize(每页显示的行数10),ItemCount(总的数据行数),进行分页。然后调用base类,RepeaterOnDataBinding事件,完成数据的绑定。执行流程如下: OnLoad>SetPage>OnPageIndexChanged>OnDataBinding>Render


    第2个主要要分析的方法是Render。在search.aspx中看到页面写的非常不规范,如下:

None.gif < headertemplate >
None.gif        
< table  id ="data"  cellpadding ="0"  cellspacing ="0" >
None.gif            
< TBODY >
None.gif
< tr  class ="gridHead" >
None.gif                
< td > Product ID </ td >
None.gif                
< td > Name </ td >
None.gif                
< td > Description </ td >
None.gif            
</ tr >
None.gif    
</ headertemplate >
None.gif    
< itemtemplate >
None.gif            
< tr  class ="gridItem" >
ExpandedBlockStart.gifContractedBlock.gif                
< td > <% dot.gif # DataBinder.Eval(Container.DataItem, "Id" %> </ td >
ExpandedBlockStart.gifContractedBlock.gif                
< td >< href ='Items.aspx?productId=<%#  DataBinder.Eval(Container.DataItem, "Id") % > '> <% dot.gif # DataBinder.Eval(Container.DataItem, "Name" %> </ a ></ td >
ExpandedBlockStart.gifContractedBlock.gif                
< td > <% dot.gif # DataBinder.Eval(Container.DataItem, "Description" %> </ td >
None.gif            
</ tr >
None.gif    
</ itemtemplate >
None.gif    
< footertemplate ></ TBODY ></ TABLE ></ footertemplate >
None.gif


    标签没有闭合,甚至有交叉。其实这样写,是为了和simplePageRender方法writehtml和成一个tableRender的主要代码如下:

None.gif //  Write out the first part of the control, the table header
None.gif
writer.Write(“ < table id = ' simplepage ' cellpadding = 0  cellspacing = 0 >< tr >< td colspan = 2 > ”);
None.gif    
base .Render(writer);
None.gif    
//  Write out a table row closure
None.gif
    writer.Write(“ </ td ></ tr >< tr  class = gridNav >< td > ”);
None.gif    
//  previous buttons are required
None.gif
    ……
None.gif    
//  next buttons are required    
None.gif
    writer.Write( </ td >< td align = right > );
None.gif    
// Close the table
None.gif
    writer.Write( " </td></tr></table> " );
None.gif


    绑定后的数据输出主要是在base.Render(writer)这句话。调用的RepeaterRender。注意红色处修改后的代码,可以在稍后的html代码中看到它们出现在各自颜色对应的位置,代码中也没有出现交叉和未闭合的标签。还可以发现其实由后台代码的writer的产生的html代码是写在页面直接生成的html 代码后面的。

None.gif < table  id ='  simplepage 'cellpadding =0  cellspacing =0 >
None.gif
< tr >
None.gif
< td  colspan =2 >
None.gif                
< table  id ="data"  cellpadding ="0"  cellspacing ="0" >
None.gif                
< TBODY >     
None.gif
< tr  class ="gridHead" >
None.gif                        
< td > Product ID </ td >
None.gif                        
< td > Name </ td >
None.gif                        
< td > Description </ td >
None.gif                    
</ tr >
None.gif                    
< tr  class ="gridItem" >
None.gif                        
< td > FI-FW-01 </ td >
None.gif                            
< td >< href ='Items.aspx?productId=FI-FW-01' > Koi </ a ></ td >
None.gif                            
< td >< img  align ="absmiddle"  src ="Images/Pets/fish3.jpg" > Freshwater fish from Japan </ td >
None.gif                    
</ tr >
None.gif                    ……
None.gif                
</ TBODY >
None.gif
</ table >
None.gif
</ td >
None.gif
</ tr >
None.gif
< tr  class =gridNav >
None.gif
< td > // next buttons are required  </ td >
None.gif
< td  align =right > // previous buttons are required  </ td >
None.gif
</ tr >
None.gif
</ table ></ p >
None.gif

转载于:https://www.cnblogs.com/freewiller/archive/2006/06/20/430058.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值