ObjectDataSource与GridView结合,实现最快速的分页

ContractedBlock.gif ExpandedBlockStart.gif .aspx页码代码
None.gif<p>分类:<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="True"></asp:DropDownList></p>
None.gif    
<asp:GridView ID="gvArticleList" runat="server" AutoGenerateColumns="False" OnRowCommand="gvArticleList_RowCommand" 
None.gif    cssselectorclass
="PrettyGridView" DataSourceID="objAricles" AllowPaging="True" DataKeyNames="ID" PageSize="2" >
None.gif        
<Columns>
None.gif            
<asp:TemplateField HeaderText="Title">
None.gif                
<ItemTemplate>
None.gif                    
<href='<%# Util.AppVirtualPath + "/Article/" + Eval("ID") %>.aspx'
ExpandedBlockStart.gifContractedBlock.gif                     title='
<%dot.gifEval("Title")%>' ><%dot.gifEval("Title")%>
ExpandedBlockStart.gifContractedBlock.gif                    
</a> (<%dot.gif# Convert.ToDateTime(Eval("ModifiedDate")).ToLocalTime().ToString("yy-MM-dd HH:mm"%>)
None.gif                
</ItemTemplate>
None.gif            
</asp:TemplateField>
None.gif            
<asp:CheckBoxField DataField="Visible" HeaderText="Visible" />
None.gif            
<asp:BoundField DataField="Hits" HeaderText="Views" >
None.gif            
</asp:BoundField>
None.gif            
<asp:TemplateField>
None.gif                
<ItemTemplate>
None.gif                    
<href='Edit/Article/<%# Eval("ID") %>.aspx' title="Edit Article">Edit</a>
None.gif                
</ItemTemplate>
None.gif            
</asp:TemplateField>
None.gif            
<asp:TemplateField ShowHeader="False">
None.gif                
<ItemTemplate>
None.gif                    
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument="ID" CommandName="Delete"
None.gif                     OnClientClick
="return confirm('您真的要删除吗?');"
None.gif                        Text
="Delete"></asp:LinkButton>
None.gif                
</ItemTemplate>
None.gif            
</asp:TemplateField>
None.gif        
</Columns>
None.gif        
<PagerSettings Position="Bottom" Mode="NumericFirstLast" PageButtonCount="5" />
None.gif    
</asp:GridView>
None.gif    
<asp:ObjectDataSource ID="objAricles" runat="server" SelectMethod="GetContents" 
None.gif    TypeName
="MK2.Framework.BLL.ContentManager" OldValuesParameterFormatString="original_{0}"
None.gif     SelectCountMethod
="GetContentCount"
None.gif     EnablePaging
="True" MaximumRowsParameterName="pageSize" DeleteMethod="Delete">
None.gif        
<SelectParameters>
None.gif            
<asp:ControlParameter ControlID="ddlCategory" Name="categoryID" PropertyName="SelectedValue"
None.gif                Type
="Int32" />
None.gif        
</SelectParameters>
None.gif        
<DeleteParameters>
None.gif            
<asp:Parameter Name="original_ID" Type="Int32" />
None.gif        
</DeleteParameters>
None.gif    
</asp:ObjectDataSource>

关键在于GirdView会自动调用ObjectDataSource的SelectMethod,并将PageSize赋给ObjectDataSource的MaximumRowsParameterName参数,这里我将它设置为pageSize,此外GirdView还有一个参数对应着ObjectDataSource的startRowIndex,这里我使用默认名startRowIndex。

下面是DAL层中的两个分页需要用到的方法:
ContractedBlock.gif ExpandedBlockStart.gif GetContents和GetContentCount
None.gifpublic static Content[] GetContents(int categoryID, int pageSize, int startRowIndex)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
return _contentService.GetContents(categoryID, pageSize, (startRowIndex / pageSize + 1));
ExpandedBlockEnd.gif        }

None.gif
None.gif        
public static int GetContentCount(int categoryID)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
return _contentService.GetContentCount(categoryID);
ExpandedBlockEnd.gif        }
方法很简单,只是调用了一个类的方法。这里主要讨论的是这两个方法的参数,需要一个categoryID,在GetContents中的另外两个参数分别对应于ObjectDataSource中设定的MaximumRowsParameterName和startRowIndex,而这两个参数是由GirdView来赋值的,ObjectDataSource只是在DAL和GirdView中起到了桥梁的作用,分离了表示层与业务逻辑的藕合。
ObjectDataSource是通过 SelectCountMethod="GetContentCount" 方法来获取根据categoryID的数据总条数。
categoryID参数通过DropDownList .SelectedValue 确定的。

这种方案快速而又高效,GirdView每次只是获取PageSize条记录,比起完全自定义的分页,的确剩掉了许多代码。

效果图如下:
ObjectDataSourceAndGridViewPaging.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值