要做一个GridView分页的应用,可以前用惯了Sql2005的CET,现在开发的项目用的却是Sql2000。CET用不了了只好写了一个临时表的存储过程。用存储过程实现GridView分页效果总体分为两大块:一个是存储过程,另一个就是自定义的按钮控件。下面是详细代码。
第一 存储过程
存储过程1:从数据库取得要查询记录的总条数
第二 自定义按钮控件
aspx代码
第一 存储过程
存储过程1:从数据库取得要查询记录的总条数
CREATE procedure P_PageSP_TotalNum
@Sql varchar(2000),
@FilterStr varchar(500)
as
declare @Str varchar(2000)
set @Str ='
declare @indextable table(id int identity(1,1),nid int);
insert into @indextable(nid) select [ID] from (' + @Sql + ' ' + @FilterStr + ') as a ;
select count(*) from @indextable'
exec(@Str)
GO
存储过程2:按页取数据@Sql varchar(2000),
@FilterStr varchar(500)
as
declare @Str varchar(2000)
set @Str ='
declare @indextable table(id int identity(1,1),nid int);
insert into @indextable(nid) select [ID] from (' + @Sql + ' ' + @FilterStr + ') as a ;
select count(*) from @indextable'
exec(@Str)
GO
CREATE procedure P_PageSP
@Lower varchar(4), --要查询的下限
@Upper varchar(4), --要查询的上限
@TableName varchar(100), --查询的表名
@OrderBy varchar(200), --排序条件
@FilterStr varchar(1000), --过滤条件
@Sql varchar(2000) --查询语句
AS
declare @Str varchar(2000)
set @Str ='
declare @indextable table(id int identity(1,1),nid int);
insert into @indextable(nid) select [ID] from (' + @Sql + ' ' + @FilterStr + ') as a ' + @OrderBy + ' ;
' + @Sql + ' inner join @indextable t on t.nid='+ @TableName +'.ID
where t.id > ' + @Lower + ' and t.id <= ' + @Upper + ' '
exec(@Str)
GO
@Lower varchar(4), --要查询的下限
@Upper varchar(4), --要查询的上限
@TableName varchar(100), --查询的表名
@OrderBy varchar(200), --排序条件
@FilterStr varchar(1000), --过滤条件
@Sql varchar(2000) --查询语句
AS
declare @Str varchar(2000)
set @Str ='
declare @indextable table(id int identity(1,1),nid int);
insert into @indextable(nid) select [ID] from (' + @Sql + ' ' + @FilterStr + ') as a ' + @OrderBy + ' ;
' + @Sql + ' inner join @indextable t on t.nid='+ @TableName +'.ID
where t.id > ' + @Lower + ' and t.id <= ' + @Upper + ' '
exec(@Str)
GO
第二 自定义按钮控件
aspx代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GvPageSet.ascx.cs" Inherits="Control_GvPageSet" %>
<div style="text-align:right; width:100%;background-color:#c6d7ef">
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 200px; text-align: right">
<asp:Label ID="Label1" runat="server" Text="当前页:"></asp:Label><asp:Label ID="lblCurrentInfo"
runat="server">1</asp:Label> <asp:Label ID="Label2" runat="server" Text="共"></asp:Label><asp:Label ID="lblCount"
runat="server">1</asp:Label><asp:Label ID="Label3" runat="server" Text="页"></asp:Label><asp:Label
ID="lblTotalNum" runat="server">5</asp:Label><asp:Label ID="Label5" runat="server" Text="条"></asp:Label>
</td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnFirst" runat="server" OnClick="PageIndex_Changed">首页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnPrev" runat="server" OnClick="PageIndex_Changed">上一页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnNext" runat="server" OnClick="PageIndex_Changed">下一页</asp:LinkButton></td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnLast" runat="server" OnClick="PageIndex_Changed">末页</asp:LinkButton></td>
</tr>
</table></div>
CS代码<div style="text-align:right; width:100%;background-color:#c6d7ef">
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 200px; text-align: right">
<asp:Label ID="Label1" runat="server" Text="当前页:"></asp:Label><asp:Label ID="lblCurrentInfo"
runat="server">1</asp:Label> <asp:Label ID="Label2" runat="server" Text="共"></asp:Label><asp:Label ID="lblCount"
runat="server">1</asp:Label><asp:Label ID="Label3" runat="server" Text="页"></asp:Label><asp:Label
ID="lblTotalNum" runat="server">5</asp:Label><asp:Label ID="Label5" runat="server" Text="条"></asp:Label>
</td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnFirst" runat="server" OnClick="PageIndex_Changed">首页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnPrev" runat="server" OnClick="PageIndex_Changed">上一页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnNext" runat="server" OnClick="PageIndex_Changed">下一页</asp:LinkButton></td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnLast" runat="server" OnClick="PageIndex_Changed">末页</asp:LinkButton></td>
</tr>
</table></div>
CS
第三 应用
把自定义控件拖到用于分页的GridView页面上,属性栏设置GridView的各个属性(都有详细的属性说明)。页面CS代码需要绑定GridView的地方调用自定义控件的BindGridView()方法绑定数据(如果是查询页面调用方法之前应先设置控件的FilterStr属性)。