All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHPUnit袖珍指南之安装PHPUnit_php资料_编程技术
Asp.Net图片验证码程序[含源码]_[Asp.Net教程]
ASP.NET,2.0的导航控件treeview和menu的实例_.net资料_编程技术
Visual C++ 6.0教程:控制结构之分支结构
第三篇:使用Visual,Studio,2008实现基本的页面交互_[Asp.Net教程]
由浅入深完全掌握Ajax之Ajax 简介_[AJAX教程]
.NET自动字符编码识别程序库,NChardet_.net资料_编程技术
改善用户体验之表单密码强度提示_JavaScript技术_编程技术
ASP.NET,2.0移动开发入门之使用样式_[Asp.Net教程]
HTML组件HTML COMPONENTS之四_[Html教程]
Reading number is top 10 pictures
Sora aoi mirror memorial classics3
In the world the most mysterious 21 place landscape2
China railway shunting skills competition
Sora aoi possession of boudoir2
某某人向找小三的人宣战了
The money of more than 100 countries and regions5
这玉米,买还是不卖?
NeedWallpaper4
The money of more than 100 countries and regions15
The real super beauty4
Download software ranking
Tram sex maniac 2 (H) rar bag15
Boxer vs Yellow2
The Bermuda triangle2
Tram sex maniac 2 (H) rar bag11
实战黑客不求人
Tram sex maniac 2 (H) rar bag14
ASP.NET.2.0.XML.高级编程(第3版)
Boxer's Top ten classic battle3
Professional killers2 data package
C#与.NET技术平台实战演练
归海一刀 published in(发表于) 2014/1/30 1:58:26 Edit(编辑)
(易懂,不使用存储过程)asp.net(C#)海量数据表高效分页算法_[Asp.Net教程]

(易懂,不使用存储过程)asp.net(C#)海量数据表高效分页算法_[Asp.Net教程]

(易懂,不使用存储过程)asp.net(C#)海量数据表高效分页算法_[Asp.Net教程]

















首先创建一张表(要求ID自动编号):
create table redheadedfile(
id int identity(1,1),
filenames nvarchar(20),
senduser nvarchar(20),
primary key(id)
)
然后我们写入50万条记录:
declare @i int
set @i=1
while @i<=500000
begin
insert into redheadedfile(filenames,senduser) values(’我的分页算法’,’陆俊铭’)
set @i=@i+1
end
GO
用Microsoft Visual Studio .NET 2003创建一张WebForm网页(本人起名webform8.aspx)
前台代码片段如下(webform8.aspx):
<%@ Page language="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="WebApplication6.WebForm8" %>



WebForm8







CellPadding="0" Runat="server">











align="center"><%#DataBinder.Eval(Container.DataItem,"filenames")%>





align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%>





align="center"><%#DataBinder.Eval(Container.DataItem,"id")%>












页/共

记录

CommandName="0">首页
&nbsp;&nbsp;&nbsp;&nbsp;

上一页
&nbsp;&nbsp;&nbsp;&nbsp;
CommandName="next">下一页
&nbsp;&nbsp;&nbsp;&nbsp;
CommandName="last">尾页
&nbsp;&nbsp;&nbsp;&nbsp;当前第
ForeColor="#ff0000">
页&nbsp;&nbsp;&nbsp;&nbsp;跳页
MaxLength="5" AutoPostBack="True">







后台代码片段如下(webform8.aspx.cs)
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication6
{
///
/// WebForm8 的摘要说明。
///

public class WebForm8 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton Fistpage;
protected System.Web.UI.WebControls.LinkButton Prevpage;
protected System.Web.UI.WebControls.LinkButton Nextpage;
protected System.Web.UI.WebControls.LinkButton Lastpage;
protected System.Web.UI.WebControls.DataList datalist1;
protected System.Web.UI.WebControls.DropDownList mydroplist;
protected System.Web.UI.WebControls.Label LPageCount;
protected System.Web.UI.WebControls.Label LRecordCount;
protected System.Web.UI.WebControls.Label LCurrentPage;
protected System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20;//定义每页显示记录
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//定义几个保存分页参数变量

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
RecCount = Calc();//通过Calc()函数获取总记录数
PageCount = RecCount/PageSize + OverPage();//计算总页数(加上OverPage()函数防止有余数造成显示

数据不完整)

ViewState["PageCounts"] = RecCount/PageSize -

ModPage();//保存总页参数到ViewState(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句)

ViewState["PageIndex"] = 0;//保存一个为0的页面索引值到ViewState
ViewState["JumpPages"] = PageCount;//保存PageCount到ViewState,跳页时判断用户输入数是否超出页码范围
//显示LPageCount、LRecordCount的状态
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
//判断跳页文本框失效
if(RecCount <= 20)
gotoPage.Enabled = false;
TDataBind();//调用数据绑定函数TDataBind()进行数据绑定运算
}
}
//计算余页
public int OverPage()
{
int pages = 0;
if(RecCount%PageSize != 0)
pages = 1;
else
pages = 0;
return pages;
}
//计算余页,防止SQL语句执行时溢出查询范围
public int ModPage()
{
int pages = 0;
if(RecCount%PageSize == 0 && RecCount != 0)
pages = 1;
else
pages = 0;
return pages;
}
/*
*计算总记录的静态函数
*本人在这里使用静态函数的理由是:如果引用的是静态数据或静态函数,连接器会优化生成代码,去掉动态重定位项(对

海量数据表分页效果更明显)。
*希望大家给予意见、如有不正确的地方望指正。
*/
public static int Calc()
{
int RecordCount = 0;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
if(dr.Read())

RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
return RecordCount;
}
//数据库连接语句(从Web.Config中获取)
public static SqlConnection MyCon()

{
SqlConnection MyConnection = new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MyConnection.Open();
return MyConnection;
}
//对四个按钮(首页、上一页、下一页、尾页)返回的CommandName值进行操作
private void Page_OnClick(object sender, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行参数运


Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数运算

string cmd = e.CommandName;
switch(cmd)//筛选CommandName
{
case "next":
CurrentPage++;
break;
case "prev":
CurrentPage--;
break;
case "last":
CurrentPage = Pages;
break;
default:
CurrentPage = 0;
break;
}
ViewState["PageIndex"] = CurrentPage;//将运算后的CurrentPage变量再次保存至ViewState
TDataBind();//调用数据绑定函数TDataBind()
}

private void TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行按钮失

效运算

Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数进行按钮失效运算
//判断四个按钮(首页、上一页、下一页、尾页)状态
if (CurrentPage + 1 > 1)
{
Fistpage.Enabled = true;
Prevpage.Enabled = true;
}

else
{
Fistpage.Enabled = false;
Prevpage.Enabled = false;
}
if (CurrentPage == Pages)
{
Nextpage.Enabled = false;
Lastpage.Enabled = false;
}
else
{
Nextpage.Enabled = true;
Lastpage.Enabled = true;
}
//数据绑定到DataList控件
DataSet ds = new DataSet();
//核心SQL语句,进行查询运算(决定了分页的效率:))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Select Top "+PageSize+" * from redheadedfile where id

not in(select top "+PageSize*CurrentPage+" id from redheadedfile order by id asc) order by id asc",MyCon());
MyAdapter.Fill(ds,"news");
datalist1.DataSource = ds.Tables["news"].DefaultView;
datalist1.DataBind();
//显示Label控件LCurrentPaget和文本框控件gotoPage状态
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
//释放SqlDataAdapter
MyAdapter.Dispose();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{

//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///

private void InitializeComponent()
{
this.Fistpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Prevpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Nextpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Lastpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.gotoPage.TextChanged += new System.EventHandler(this.gotoPage_TextChanged);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
//跳页代码
private void gotoPage_TextChanged(object sender, System.EventArgs e)
{
try
{
JumpPage = (int)ViewState["JumpPages"];//从ViewState中读取可用页数值保存到JumpPage变量中
//判断用户输入值是否超过可用页数范围值
if(Int32.Parse(gotoPage.Text) > JumpPage Int32.Parse(gotoPage.Text) <= 0)


Response.Write("");
else
{

int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//转换用户输入值保存在int型

InputPage变量中
ViewState["PageIndex"] = InputPage;//写入InputPage值到ViewState["PageIndex"]中
TDataBind();//调用数据绑定函数TDataBind()再次进行数据绑定运算
}
}
//捕获由用户输入不正确数据类型时造成的异常
catch(Exception eXP)
{

Response.Write("");
}
}
}
}












































添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.