我在使用 GridView 时 ,我设置了 GridView 分页相关属性,我想问下 ,如下情况 :
比如 ,我 select 某表 ,一共得到 1000000 条数据 ,这时 GridView 就分页显示了 。
那这时 ,我想问 :
情况一 : 1000000 条数据都到了客户端 ,然后再 GridView 分页显示 。
情况二 : 数据分批到达客户端 ,GridView 显示第一页时 ,第一页的数据从服务器到达客户端 ;GridView 显示第二页时 ,第二页的数据从服务器到达客户端 ;GridView 显示第三页时 ,第三页的数据从服务器到达客户端 ;......
请问是哪种情况??
如果是第二种情况的话,要自己写分页算法??有好的分页算法推荐下(链接啥的都可)??
------解决方案--------------------------------------------------------
分页英爱查询需要的数据,然后绑定到Gridview
比如你每页20条记录,那么第一页就该查询第1-20条,第二页就该查询第21-40条,以此类推。
根据查询返回的记录重新绑定Gridview.
------解决方案--------------------------------------------------------
第二种,按需取数据,张永资源小速度快----使用分页控件比较方便
------解决方案--------------------------------------------------------
肯定要用情况二了,一次性加载那么多数据性能肯定不高,分页算法代码都差不多,总记录数,当前页码,每页显示记录数网上很多,直接写一个存储过程就好了,要分页的时候就调写好的过程就OK了。
------解决方案--------------------------------------------------------
可以使用分页控件,网上有很多,主流的就是aspnetpager 控件,功能较全
------解决方案--------------------------------------------------------
程序代码
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Clear
-- Create date: 2007-01-30
-- Description: 高性能分页
-- =============================================
Alter PROCEDURE [dbo].[Tag_Page_Name_Select]
-- 传入最大显示纪录数和当前页码
@MaxPageSize int,
@PageNum int,
-- 设置一个输出参数返回总纪录数供分页列表使用
@Count int output
AS
BEGIN
SET NOCOUNT ON;
DECLARE
-- 定义排序名称参数
@Name nvarchar(50),
-- 定义游标位置
@Cursor int
-- 首先得到纪录总数
Select @Count = count(tag_Name)
FROM [viewdatabase0716].[dbo].[view_tag];
-- 定义游标需要开始的位置
Set @Cursor = @MaxPageSize*(@PageNum-1)+1
-- 如果游标大于纪录总数将游标放到最后一页开始的位置
IF @Cursor > @Count
BEGIN
-- 如果最后一页与最大每次纪录数相等,返回最后整页
IF @Count % @MaxPageSize = 0
BEGIN
IF @Cursor > @MaxPageSize
Set @Cursor = @Count - @MaxPageSize + 1
ELSE
Set @Cursor = 1
END
-- 否则返回最后一页剩下的纪录
ELSE
Set @Cursor = @Count - (@Count % @MaxPageSize) + 1
END
-- 将指针指到该页开始
Set Rowcount @Cursor
-- 得到纪录开始的位置
Select @Name = tag_Name
FROM [viewdatabase0716].[dbo].[view_tag]
orDER BY tag_Name;
-- 设置开始位置
Set Rowcount @MaxPageSize
-- 得到该页纪录
Select *
From [viewdatabase0716].[dbo].[view_tag]
Where tag_Name >= @Name
order By tag_Name
Set Rowcount 0
END
然后是分页控件(... 为省略的生成HTML代码方法):
程序代码
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
/// <summary>
/// 扩展连接字符串
/// </summary>
public class ExStringBuilder
{
private StringBuilder InsertString;
private StringBuilder PageString;
private int PrivatePageNum = 1;
private int PrivateMaxPageSize = 25;
private int PrivateMaxPages = 10;
private int PrivateCount;
private int PrivateAllPage;
public ExStringBuilder()
{
InsertString = new StringBuilder("");
}
/// <summary>
/// 得到生成的HTML
/// </summary>
public string GetHtml
{
get
{
return InsertString.ToString();
}
}
/// <summary>
/// 得到生成的分页HTML
/// </summary>
public string GetPageHtml
{