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

转载 2006年06月21日 16:12:00

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中看到页面写的非常不规范,如下:

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


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

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


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

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

简单实用的翻页控件SimplePager

  • 2008年11月07日 23:40
  • 72KB
  • 下载

重温Petshop 谈谈对三层架构的理解--兼发布一个通用的数据访问控件(oracle免装客户端)

编写这个组件的需求灵感来自于看了某个产品(企业应用系统)研发项目的源码,该产品为了同时支持sql server 和oracle, 照搬了微软的 petshop的代码作为系统架构,petshop相信很...
  • wnety
  • wnety
  • 2012年03月21日 17:13
  • 688

学习PetShop3.doc

  • 2008年11月08日 21:39
  • 42KB
  • 下载

PetShop3.0数据访问层实现详解

前面的文章对Petshop的多层应用和表现层进行了介绍。本篇将详细介绍PetShop3.0的数据访问层实现,及其优缺点。  PetShop3.0的Oracle数据层实现在OracleDAL工程中。 ...

MVC 3.0学习笔记(自定义控件)

现有控件:             例如ASP.NET MVC框架包括以下设置标准的HTML控件(部分控件): Html.ActionLink() Html.BeginForm() Ht...

ASP.NET MVC 3.0学习系列(19)-开源控件实现表格排序和分页

概述   前几节我们学习了怎么在MVC 3.0程序里面实现一个数据表格,以及在数据表格中加入了排序、分页和筛选等功能,对于MVC视图中标记的呈现,我们的办法是在一个中通过foreach遍历数据集,...

petshop3.0

  • 2007年05月19日 09:40
  • 771KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习PetShop3.0(3)查询及simplePager控件
举报原因:
原因补充:

(最多只允许输入30个字)