当前位置: 首页 > news >正文

DataGrid连接Access的快速分页法(5)——实现快速分页

DataGrid连接Access的快速分页法(5)——实现快速分页
我使用Access自带的Northwind中文数据库的“订单明细”表作为例子,不过我在该表添加了一个名为“Id”的字段,数据类型为“自动编号”,并把该表命名为“订单明细表”。
FastPaging_DataSet.aspx
--------------------------------------------------------------------------------------
<%@ Page language="c#" Codebehind="FastPaging_DataSet.aspx.cs" AutoEventWireup="false" Inherits="Paging.FastPaging_DataSet" EnableSessionState="False" enableViewState="True" enableViewStateMac="False" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>DataGrid + DataReader 自定义分页</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body>
<form runat="server">
<asp:datagrid id="DataGrid1" runat="server" BorderWidth="1px" BorderColor="Black" Font-Size="12pt"
AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="#aaaadd" PagerStyle-HorizontalAlign="Right"
CellPadding="3" AllowPaging="True" AllowCustomPaging="True" AutoGenerateColumns="False" OnPageIndexChanged="MyDataGrid_Page"
PageSize="15" AllowSorting="True" OnSortCommand="DataGrid1_SortCommand">
<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>
<ItemStyle Font-Size="Smaller" BorderWidth="22px"></ItemStyle>
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="ID" SortExpression="ID" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="订单ID" HeaderText="订单ID"></asp:BoundColumn>
<asp:BoundColumn DataField="产品ID" HeaderText="产品ID"></asp:BoundColumn>
<asp:BoundColumn DataField="单价" HeaderText="单价"></asp:BoundColumn>
<asp:BoundColumn DataField="数量" HeaderText="数量"></asp:BoundColumn>
<asp:BoundColumn DataField="折扣" HeaderText="折扣"></asp:BoundColumn>
</Columns>
<PagerStyle Font-Names="VerDana" Font-Bold="True" HorizontalAlign="Right" ForeColor="Coral"
Mode="NumericPages"></PagerStyle>
</asp:datagrid></form>
</body>
</HTML>
FastPaging_DataSet.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.OleDb;
using System.Text;
namespace Paging
{
public class FastPaging_DataSet : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
const String QUERY_FIELDS = "*"; //要查询的字段
const String TABLE_NAME = "订单明细表"; //数据表名称
const String PRIMARY_KEY = "ID"; //主键字段
const String DEF_ORDER_TYPE = "ASC"; //默认排序方式
const String SEC_ORDER_TYPE = "DESC"; //可选排序方式
const String CONDITION = "产品ID='AV-CB-1'";
OleDbConnection conn;
OleDbCommand cmd;
OleDbDataAdapter da;
#region 属性
#region CurrentPageIndex
/// <summary>
/// 获取或设置当前页的索引。
/// </summary>
public int CurrentPageIndex
{
get { return (int) ViewState["CurrentPageIndex"]; }
set { ViewState["CurrentPageIndex"] = value; }
}
#endregion
#region OrderType
/// <summary>
/// 获取排序的方式:升序(ASC)或降序(DESC)。
/// </summary>
public String OrderType
{
get {
String orderType = DEF_ORDER_TYPE;
if (ViewState["OrderType"] != null) {
orderType = (String)ViewState["OrderType"];
if (orderType != SEC_ORDER_TYPE)
orderType = DEF_ORDER_TYPE;
}
return orderType;
}
set { ViewState["OrderType"] = value.ToUpper(); }
}
#endregion
#endregion
private void Page_Load(object sender, System.EventArgs e)
{
#region 实现
String strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="
+ Server.MapPath("Northwind.mdb");
conn = new OleDbConnection(strConn);
cmd = new OleDbCommand("",conn);
da = new OleDbDataAdapter(cmd);
if (!IsPostBack) {
// 设置用于自动计算页数的记录总数
DataGrid1.VirtualItemCount = GetRecordCount(TABLE_NAME);
CurrentPageIndex = 0;
BindDataGrid();
}
#endregion
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void BindDataGrid()
{
#region 实现
// 设置当前页的索引
DataGrid1.CurrentPageIndex = CurrentPageIndex;
// 设置数据源
DataGrid1.DataSource = GetDataView();
DataGrid1.DataBind();
#endregion
}
/// <summary>
/// 取得数据库表中的记录总数。
/// </summary>
/// <param name="tableName">数据库中的表的名称。</param>
/// <returns>成功则为表中记录的总数;否则为 -1。</returns>
private int GetRecordCount(string tableName)
{
#region 实现
int count;
cmd.CommandText = "SELECT COUNT(*) AS RecordCount FROM " + tableName;
try {
conn.Open();
count = Convert.ToInt32(cmd.ExecuteScalar());
} catch(Exception ex) {
Response.Write (ex.Message.ToString());
count = -1;
} finally {
conn.Close();
}
return count;
#endregion
}
private DataView GetDataView()
{
#region 实现
int pageSize = DataGrid1.PageSize;
DataSet ds = new DataSet();
DataView dv = null;
cmd.CommandText = FastPaging.Paging(
pageSize,
CurrentPageIndex,
DataGrid1.VirtualItemCount,
TABLE_NAME,
QUERY_FIELDS,
PRIMARY_KEY,
FastPaging.IsAscending(OrderType) );
try {
da.Fill(ds, TABLE_NAME);
dv = ds.Tables[0].DefaultView;
} catch(Exception ex) {
Response.Write (ex.Message.ToString());
}
return dv;
#endregion
}
protected void MyDataGrid_Page(Object sender, DataGridPageChangedEventArgs e)
{
CurrentPageIndex = e.NewPageIndex;
BindDataGrid();
}
protected void DataGrid1_SortCommand(object source, DataGridSortCommandEventArgs e)
{
#region 实现
DataGrid1.CurrentPageIndex = 0;
this.CurrentPageIndex = 0;
if (OrderType == DEF_ORDER_TYPE)
OrderType = SEC_ORDER_TYPE;
else
OrderType = DEF_ORDER_TYPE;
BindDataGrid();
#endregion
}
}
}
我所要介绍的 DataGrid 连接 Access 的快速分页法就到这里了。如果你有其他更好的分页方法,不如也拿出来跟大家分享!
小弟第一次写文章,有说得不对的地方,希望大家指正。
作者:黎波
邮箱:itfun@163.com

相关文章:

  • python使用技巧(二十四):彻底学会argparse与sys.argv方法
  • 开发工具使用1:UbuntuX.Y
  • DataGrid连接Access的快速分页法(4)——动态生成SQL语句
  • Linux超级超级管理pkexec权限完美解决/etc/sudoers、/etc/sudoers.d is world writable和kex_exchange
  • DataGrid连接Access的快速分页法(3)——SQL语句的选用(降序)
  • 在 Linux 上安装 FL Studio
  • DataGrid连接Access的快速分页法(2)——SQL语句的选用(升序)
  • 音乐人声分离[源码教程连接]
  • SoundTouch音频处理库
  • DataGrid连接Access的快速分页法(1)——需求与现状
  • 自动驾驶:使用 3D 时空卷积网络的自监督点云预测
  • 文件共享的新面孔——《纽约时报》专访BitTorrent之父
  • 实战OpenPose项目1:开篇使用文档
  • 实战OpenPose项目2:开发环境配置与demo运行
  • Martin Fowler:设计已死?
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 0基础学习移动端适配
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • es6--symbol
  • mongodb--安装和初步使用教程
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Unix命令
  • vue中实现单选
  • 初识MongoDB分片
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 关于Java中分层中遇到的一些问题
  • 记一次和乔布斯合作最难忘的经历
  • 微信小程序:实现悬浮返回和分享按钮
  • 项目管理碎碎念系列之一:干系人管理
  • 《码出高效》学习笔记与书中错误记录
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​如何防止网络攻击?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (0)Nginx 功能特性
  • (done) 两个矩阵 “相似” 是什么意思?
  • (NSDate) 时间 (time )比较
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)ObjectiveC 深浅拷贝学习
  • (转载)OpenStack Hacker养成指南
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .libPaths()设置包加载目录
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CORE Aws S3 使用
  • .NetCore部署微服务(二)
  • .NET的数据绑定
  • @Controller和@RestController的区别?
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [BUUCTF 2018]Online Tool(特详解)
  • [CISCN2019 华东北赛区]Web2
  • [Design Pattern] 工厂方法模式