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

然而在庞大的数据量,用户所需要的不过是那么几条,甚至只要其中的一条数据,所以,为了减少开销,每次只从数据库中读取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. 一个考验c语言和数据结构功底的小项目

    想测一下自己c语言学习水平的朋友可以做一下这个项目试试,能做出来说明c语言已经入门了   #include<stdio.h> #include<stdlib.h> #inclu ...

  2. N项阶乘累加求和新算法

    pdf原版链接

  3. java crm 进销存 springmvc SSM 项目 源码 系统

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  4. Mysql5.7.21 Navicat触发器创建

    CREATE TRIGGER m_trigger AFTER UPDATE ON table1 FOR EACH ROW BEGIN IF( old.status!= new.status) THEN ...

  5. 文本处理三剑客之 awk

    GAWK:报告生成器,格式化文本输出 awk [options] ‘program’ var=value file… awk [options] -f programfile var=value fi ...

  6. linux查看日志文件内容命令(面试被常问到的问题)

    tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, linux 如何显示一个文件的某几行(中间几行) 从第3000行开始,显示1000行.即显示3 ...

  7. 二、用Delphi10.3 创建一条JSON数据的第二种方法,并格式化输出

    一.用Delphi10.3构造一个JSON数据的第二种方法,并格式化输出,代码如下: uses //System.JSON, System.JSON.Types, System.JSON.Writer ...

  8. Fiddler设置代理后,iphone手机无法访问网络的全面解决办法

    好久不抓手机包,都有些忘记了,电脑上软件都在,原本是Fiddler4,现在已自动升级到V5. 入主题吧,首先Fiddler设置好代理,然后手机安装证书好了,设置手机代理,结果iphone无法访问网络, ...

  9. matlab2016b配置libsvm的各中坑及解决办法

    Q1:matlab2016b不能自动关联m文件! A1: (1)首先准备好工具,工具链接:pan.baidu.com/s/1t_KaFZNOFln9m57sMBTrkQ:提取码:x49w. (2)下载 ...

  10. 【转载】完成C++不能做到的事 - Visitor模式

    原文: 完成C++不能做到的事 - Visitor模式 拿着刚磨好的热咖啡,我坐在了显示器前.“美好的一天又开始了”,我想. 昨晚做完了一个非常困难的任务并送给美国同事Review,因此今天只需要根据 ...