使用控件自带的分页功能时,会先将所查询的数据全部加载出来,若数据量较大,则造成浏览器端等待时间过长。

然而在庞大的数据量,用户所需要的不过是那么几条,甚至只要其中的一条数据,所以,为了减少开销,每次只从数据库中读取10条数据。

以下是我做过的一个例子,该数据库表中有101万行数据,只要将数据库连接修改一下,即可复制,粘贴使用。

以下是aspx中的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../Styles/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="../Styles/admin-all.css" />
<link rel="stylesheet" type="text/css" href="../Styles/ui-lightness/jquery-ui-1.8.22.custom.css" />
<link rel="stylesheet" type="text/css" href="../Styles/web.css" />
<script type="text/javascript" src="../Scripts/jquery-1.7.2.js"></script>
<script type="text/javascript" src="../Scripts/jquery-ui-1.8.22.custom.min.js"></script>
<script type="text/javascript" src="../Scripts/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="Search" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<td colspan="6">
患者管理查询
</td>
</tr>
</thead>
<tr>
<td rowspan="2">
精确查找
</td>
<td>
编号:
</td>
<td>
<asp:TextBox ID="TextBoxIDNumber" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
姓名:
</td>
<td>
<asp:TextBox ID="TextBoxName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td rowspan="2">
模糊查询:
</td>
<td>
编号:
</td>
<td>
<asp:TextBox ID="TextBoxNumberx" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
姓名:
</td>
<td>
<asp:TextBox ID="TextBoxNamex" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td> </td>
<td>
排列方式
</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="1">按ID正序</asp:ListItem>
<asp:ListItem Value="2">按ID倒序</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td colspan="3">
<asp:Button ID="ButtonSearch" runat="server" Text="查询" OnClick="ButtonSearch_Click" />
&nbsp;&nbsp;
<asp:Button ID="ButtonExcel" runat="server" Text="导出" OnClick="ButtonExcel_Click" />
</td>
</tr> </table>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td style="width:50px;">
ID
</td>
<td style="width:150px;">
编号
</td>
<td style="width:100px;">
姓名
</td>
</tr> </HeaderTemplate>
<ItemTemplate>
<tr>
<td style=" color:Green;">
<%#Eval("ID")%>
</td>
<td style="color:Blue;">
<%#Eval("Number")%>
</td>
<td style="color:Red;">
<%#Eval("Name")%>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate> </asp:Repeater>
<table>
<tr >
<td>
<asp:LinkButton ID="LinkButtonFirst" runat="server" onclick="LinkButtonFirst_Click">首页</asp:LinkButton></td>
<td>
<asp:TextBox ID="TextBoxGo" runat="server" Width="29px"></asp:TextBox></td> <td>
<asp:LinkButton ID="LinkButtonGo" runat="server" onclick="LinkButtonGo_Click">前往</asp:LinkButton></td>
<td>
<asp:Label ID="Label1" runat="server" Text="第"></asp:Label></td>
<td>
<asp:Label ID="index" runat="server" Text="1"></asp:Label></td>
<td>
<asp:Label ID="Label3" runat="server" Text="页"></asp:Label></td>
<td>
<asp:Label ID="Label2" runat="server" Text="共"></asp:Label></td>
<td>
<asp:Label ID="labcount" runat="server" Text=""></asp:Label></td>
<td>
<asp:Label ID="Label5" runat="server" Text="页"></asp:Label></td>
<td>
<asp:LinkButton ID="LinkButtonBefore" runat="server" onclick="LinkButtonBefore_Click">上一页</asp:LinkButton></td>
<td>
<asp:LinkButton ID="LinkButtonAfter" runat="server" onclick="LinkButtonAfter_Click">下一页</asp:LinkButton></td>
<td>
<asp:LinkButton ID="LinkButtonLast" runat="server" onclick="LinkButtonLast_Click">尾页</asp:LinkButton></td>
</tr>
</table>
</div>
</form>
</body>
</html>

下面是后台cs代码:

public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.shuju();
} } /// <summary>
/// 获取数据,并设置页数
/// </summary>
/// <param name="pagenumber"></param> public void GetData(int pagenumber)
{
string str_sql1 = "select id,number,name from dbo.test ";
string str_sql2 = "select count(*) from dbo.test "; //获得数据总行数
if (ViewState["where"] != null)
{
str_sql2 += ViewState["where"].ToString();
str_sql1 += ViewState["where"].ToString();
}
if (ViewState["order"] != null)
{
str_sql1 += ViewState["order"].ToString();
}
else
{
str_sql1 += " order by id ";
}
str_sql1 += " offset " + pagenumber + " rows fetch next 10 rows only ";
string rowsNumber = MySql.GetSingleStr(str_sql2); //获得数据总行数
DataTable dt = MySql.GetDataTable(str_sql1);
if (Convert.ToInt32(rowsNumber) % != )
{
labcount.Text = (Convert.ToInt32(rowsNumber) / + ).ToString(); //返回总页数,不能被10整除则加一页
}
else
{
labcount.Text = (Convert.ToInt32(rowsNumber) / ).ToString(); //返回总页数
}
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
} /// <summary>
/// 初始化数据
/// </summary>
public void shuju()
{
GetData();
index.Text = ""; //当前页为1 //把首页和上一页设置为不可操作
if (index.Text == "")
{
LinkButtonFirst.Enabled = false;
LinkButtonBefore.Enabled = false;
}
if (index.Text == labcount.Text)
{
LinkButtonAfter.Enabled = false;
LinkButtonLast.Enabled = false;
}
else
{
LinkButtonAfter.Enabled = true;
LinkButtonLast.Enabled = true;
}
} /// <summary>
/// 首页按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButtonFirst_Click(object sender, EventArgs e)
{ GetData();
index.Text = ""; //当前页为1 //把首页和上一页设置为不可操作
if (index.Text == "")
{
LinkButtonFirst.Enabled = false;
LinkButtonBefore.Enabled = false;
}
if (index.Text == labcount.Text)
{
LinkButtonAfter.Enabled = false;
LinkButtonLast.Enabled = false;
}
else
{
LinkButtonAfter.Enabled = true;
LinkButtonLast.Enabled = true;
}
} /// <summary>
/// Go按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButtonGo_Click(object sender, EventArgs e)
{
if (TextBoxGo.Text != "")
{
string pageindex = TextBoxGo.Text; //获取要前往的页数
int intpageindex = Convert.ToInt32(pageindex); //转为整型 int pagecount = Convert.ToInt32(labcount.Text);
if (intpageindex > pagecount&&intpageindex<=) //判断,如果输入的数字大于总页数就返回
{
return;
}
else
{
int pageNumber = Convert.ToInt32(TextBoxGo.Text)*-;
GetData(pageNumber);
if (TextBoxGo.Text == "") //判断如果输入1,首页和上一页不可操作,但是尾页和下一页可以操作
{
LinkButtonFirst.Enabled = false;
LinkButtonBefore.Enabled = false; LinkButtonAfter.Enabled = true;
LinkButtonLast.Enabled = true;
}
else if (TextBoxGo.Text == labcount.Text) //判断如果输入的数等于总页数,首页和第一页可以操作,但是尾页和下一页不可操作
{
LinkButtonAfter.Enabled = false;
LinkButtonLast.Enabled = false; LinkButtonFirst.Enabled = true;
LinkButtonBefore.Enabled = true;
}
else //如果是其他情况,首页和下一页,尾页和下一页都可操作
{
LinkButtonAfter.Enabled = true;
LinkButtonLast.Enabled = true; LinkButtonFirst.Enabled = true;
LinkButtonBefore.Enabled = true;
}
} index.Text = TextBoxGo.Text; //设置当前页数等于输入的页数
}
else
{
return;
}
} /// <summary>
/// 上一页按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButtonBefore_Click(object sender, EventArgs e)
{ string pageindex = index.Text; //获取当前页数
int pageNumber = Convert.ToInt32(pageindex) * - ; //获取上一页之前的总行数
GetData(pageNumber); int intindex = Convert.ToInt32(index.Text);
index.Text = (intindex - ).ToString(); //当前页-1 LinkButtonAfter.Enabled = true;
LinkButtonLast.Enabled = true; if (index.Text == "")
{
LinkButtonFirst.Enabled = false;
LinkButtonBefore.Enabled = false;
} } /// <summary>
/// 下一页按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButtonAfter_Click(object sender, EventArgs e)
{
string pageindex = index.Text; //获取当前页数
int pageNumber = Convert.ToInt32(pageindex)*; //获取下一页之前的总行数
GetData(pageNumber); int intindex = Convert.ToInt32(index.Text);
index.Text = (intindex + ).ToString(); //当前页+1 LinkButtonFirst.Enabled = true;
LinkButtonBefore.Enabled = true; if (index.Text == labcount.Text)
{
LinkButtonAfter.Enabled = false;
LinkButtonLast.Enabled = false;
}
} /// <summary>
/// 尾页按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButtonLast_Click(object sender, EventArgs e)
{ int pageNumber = (Convert.ToInt32(labcount.Text) - ) * ; //获取最后一页之前的总行数
GetData(pageNumber); index.Text = labcount.Text; LinkButtonFirst.Enabled = true;
LinkButtonBefore.Enabled = true; LinkButtonAfter.Enabled = false;
LinkButtonLast.Enabled = false;
}
protected void ButtonSearch_Click(object sender, EventArgs e)
{
string strWhere = " where ";
string strOrder = " order by ID ";
if (TextBoxIDNumber.Text != "") //填写编号
{
strWhere += "Number='" + TextBoxIDNumber.Text + "' and ";
}
if (TextBoxName.Text != "") //填写姓名
{
strWhere += "Name='" + TextBoxName.Text + "' and ";
}
if (TextBoxNumberx.Text != "") //填写模糊编号
{
strWhere += "Number like '" + TextBoxNumberx.Text + "%' and ";
}
if (TextBoxNamex.Text != "") //编写模糊姓名
{
strWhere += "Name like '" + TextBoxNamex.Text + "%' and ";
}
strWhere += " 1=1 ";
if (DropDownList1.SelectedValue == "") //选择倒序
{
strOrder += " desc";
}
ViewState["where"] = strWhere;
ViewState["order"] = strOrder;
shuju(); } protected void ButtonExcel_Click(object sender, EventArgs e)
{
string sql = "select id,number,name from dbo.test ";
if(ViewState["where"]!=null)
{
sql += ViewState["where"].ToString();
}
if (ViewState["order"] != null)
{
sql += ViewState["order"].ToString();
}
DataTable dtexcel = MySql.GetDataTable(sql);
Random ran = new Random();
string temp = ran.Next(, ).ToString();
string excel = "Excel-" + DateTime.Now.ToString("yyyyMMdd") + temp;
CreateExcel(dtexcel, "application/ms-excel", excel);
} /// <summary>
/// 导出excel
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="FileType">文件类型</param>
/// <param name="FileName">文件名</param>
public void CreateExcel(DataTable dt, string FileType, string FileName)
{
Response.Clear();
Response.Charset = "UTF-8";
Response.Buffer = true;
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");
Response.ContentType = FileType;
string colHeaders = string.Empty;
string ls_item = string.Empty;
ls_item += "ID\t编号\t姓名\n";
DataRow[] myRow = dt.Select();
int i = ;
int cl = dt.Columns.Count;
foreach (DataRow row in myRow)
{
for (i = ; i < cl; i++)
{
if (i == (cl - ))
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + "\t";
}
}
Response.Output.Write(ls_item);
ls_item = string.Empty;
}
Response.Output.Flush();
Response.End();
}
}

附带excel导出功能。

ListView高效分页的更多相关文章

  1. Android中使用ListView实现分页刷新(线程休眠模拟)

    当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...

  2. T-SQL 使用WITH高效分页

    一.WITH AS 含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...

  3. Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)

    当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...

  4. Android基本控件之listView(三)<用ListView实现分页加载>

    我们之前讨论了ListView的基本使用方法和ListView的优化 今天我们再来讨论一个关于ListView的一个新的东西~就是分页加载.那么什么是分页加载呢?简单点说,就是"下拉刷新&q ...

  5. android UI进阶之实现listview的分页加载

    上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一 下子全部加载用户未读的微薄这将耗费比较长的时间,造成 ...

  6. C#高效分页代码(不用存储过程)

    首先创建一张表(要求ID自动编号): create table redheadedfile ( id ,), filenames ), senduser ), primary key(id) ) 然后 ...

  7. 基于Jquery+Ajax+Json+存储过程 高效分页

    在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...

  8. Access大数据高效分页语句

    Access大数据高效分页语句 oracle的分页查询可以利用rowid伪列. db2的分页查询可以利用row_number() over()聚合函数. mysql有limit. access仿佛先天 ...

  9. My Sql 高效分页

    /* *普通分页 *在数据文件上偏移1000000查出10条 */ select * from zoldesk_92game_net_ecms_bj where classid=303 ORDER B ...

随机推荐

  1. mysql 系统用户最大文件打开数限制

    纸上得来终觉浅,绝知此事多宕机...记录一下自己很蠢的一次故障处理过程. 上周的时候,一个刚上线的系统又开始反映登不上了,因为最近这个系统也老是出现这个问题,开发也一直在找问题中,所以也没太在意.于是 ...

  2. Linux 和 ubuntu安装redis

    Linux 下安装reids 下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://dow ...

  3. Hadoop(18)-MapReduce框架原理-WritableComparable排序和GroupingComparator分组

    1.排序概述 2.排序分类 3.WritableComparable案例 这个文件,是大数据-Hadoop生态(12)-Hadoop序列化和源码追踪的输出文件,可以看到,文件根据key,也就是手机号进 ...

  4. 人生苦短,我用python

    星空不问赶路人,时光不负有心人,你可以脱变. 1.计算机的初步认识 2.解释器的安装 python2.7(2020年官方不在维护) python3.6 (官方推荐) 1.下载安装包 https://w ...

  5. ruby puts, print, p方法比较

    1.puts([obj[, obj2[, ....]]] ) 依次将obj和换行符输出到$>.若没有参数的话则只会输出换行符. 若参数是数组,则依次输出数组元素和换行符.若将既非数组又非字符串的 ...

  6. 实际项目开发过程中常用C语言函数的9大用法

    C语言是当中最广泛的计算机编程语言,是所有计算机编程语言的祖先,其他计算机编程语言包括当前流行的Java语言,都是用C语言实现的,C语言是编程效率最高的计算机语言,既能完成上层应用开发,也能完成底层硬 ...

  7. 数据结构与算法之二叉树 ——in dart

    用dart语言实现的二叉树,实现了插入.查找.删除,中序遍历.前序.后序遍历等功能. class BinaryTree<E extends Comparable> { Node<E& ...

  8. [COGS257]动态排名系统 树状数组套主席树

    257. 动态排名系统 时间限制:5 s   内存限制:512 MB [问题描述]给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:1.查询A[ ...

  9. OpenStack入门篇(二十一)之VXLAN原理

    1.Vxlan的概念 VXLAN 全称 Virtual eXtensible Local Area Network.(虚拟扩展本地局域网)VXLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更 ...

  10. SpringCloud-微服务配置统一管理SpringCloud Config(七)

    前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring.mybatis.log等等各种各样的配置文件和属性文件,另外你还可能有开发环境.测试环境.生产环境等,这样的话就得一式三份,若是传 ...