asp.net分页方法
ASP.NET分页的是我们在编程过程中遇到的常见问题,下面就这个问题说下添美的看法。
q 启用部分数据控件的内置分页功能,如设置GridView控件的"AllowPaging"属性为"true",类似的数据控件还有DetailsView等。
q 通过SQL查询语句,以提取指定部分的数据的方式完成分页的功能。也包括调用数据库中内置的存储过程完成分页数据的提取。
q 调用所对应数据适配器对象(DataAdapter对象)的Fill方法时,传递分页参数以完成数据集的分页功能。
q 通过访问DataTable对象的"Rows"属性,以循环输出的方式访问结果集中指定区段的数据行,以达到分页的效果。
【分析】
分页功能在大部分WEB项目中使用比较广泛,本题考查面试者对ASP.NET中可用分页方法的了解程度。在页面布局等方面要求不高的情况下,例如WEB后台管理系统,使用数据控件内置的分页功能通常是编程者的首选。为了展示常用的这四种分页方法,制作一个实例,在同一个页面中分别用这四种方法对相同的结果集分页显示。
在VS 2008中添加新的WEB窗体到NetWeb3项目,并命名为Pager.aspx.在页面中添加1个GridView控件,用于展示内置分页功能,添加2个Repeater控件,用于展示SQL语句分页和数据适配器对象分页。
最后通过在Pager.aspx页面导入System.Data命名空间,在页面中直接用for循环输出dt数据表的指定数量记录,以完成分页显示的效果。编写Pager.aspx如代码12.12所示。
代码12.12 多种方法分页显示页面:Pager.aspx
<html xmlns="
http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
www.sytm.net网站四种分页方法实例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>控件内置分页【每页3条记录】</h3>
<asp:GridView runat="server" ID="GView" AllowPaging="true" PageSize="3"></asp:GridView>
<h3>数据适配器分页【当前显示第1页,每页2条记录】</h3>
<asp:Repeater runat="server" ID="Rp1" >
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li><asp:Label runat="server" ID="UName" Text='<%# Eval("UserName") %>'></asp:Label>:<asp:Label runat="server" ID="Msg" Text='<%# Eval("Message") %>'></asp:Label></li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
<h3>SQL分页【当前显示第2页,每页3条记录】</h3>
<asp:Repeater runat="server" ID="Rp2" >
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li><asp:Label runat="server" ID="UName" Text='<%# Eval("UserName") %>'></asp:Label>:<asp:Label runat="server" ID="Msg" Text='<%# Eval("Message") %>'></asp:Label></li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
<h3>数据表分页【当前显示第1页,每页3条记录】</h3>
<%
Response.Write("<ul>");
int i;
string UName;
string Msg;
for(i=0;i<3;i++)
{UName = dt.Rows[i][0].ToString();
Msg = dt.Rows[i][1].ToString();
Response.Write(String.Format("<li>{0}:{1}</li>",UName,Msg));}
Response.Write("</ul>");
%>
</div>
</form>
</body>
</html>
编写Pager.aspx.cs如代码12.13所示。
代码12.13 多种方法分页逻辑代码:Pager.aspx.csusing System;
……
//导入必要的命名空间,使用SQL SERVER数据提供者using System.Data.SqlClient;
namespace NetWeb3
{public partial class Pager : System.Web.UI.Page{//从Web.config的AppSettings节点的第1个子节点中获取数据库连接字符串//将连接字符串对象引用赋值给静态字符串变量CnStrstatic string CnStr = ConfigurationManager.AppSettings[0];//根据CnStr变量创建SqlConnection对象,引用为cnSqlConnection cn = new SqlConnection(CnStr);//声明SqlDataAdapter类型变量da
SqlDataAdapter da;
//创建DataSet对象,引用为ds
DataSet ds = new DataSet();
//声明DataTable类型的变量dt
//protected修饰符可以保证在*.aspx中可以访问dtprotected DataTable dt;
protected void Page_Load(object sender, EventArgs e){this.GView.PageIndexChanging += new GridViewPageEventHandler(GView_PageIndexChanging);//判断页面是否为首次加载
if (!IsPostBack)
{//调用自定义的MyBind方法
MyBind();
}
}
protected void MyBind()
{string SqlStr = "SELECT [UserName],[Message] FROM [LeaveMsg]";//根据SqlStr和cn创建新的SqlDataAdapter对象,引用为da变量da = new SqlDataAdapter(SqlStr, cn);
//调用da的Fill方法,将记录填充到ds,其DataTable名称为LeaveMsg1da.Fill(ds, "LeaveMsg1");
//将LeaveMsg1数据表设置为GView控件的数据源
this.GView.DataSource = ds.Tables["LeaveMsg1"];//调用da的Fill方法,将记录填充到ds,其DataTable名称为LeaveMsg2//Fill方法接收的第2个参数代表从第几条记录开始填充,第3个参数代表填充多少条记录da.Fill(ds,0,2, "LeaveMsg2");
//将LeaveMsg1数据表设置为Rp1控件的数据源
this.Rp1.DataSource = ds.Tables["LeaveMsg2"].DefaultView;cn.Open();
//编写SQL语句,直接在数据库查询时分页获取数据SqlStr = "Select Top 3 [UserName],[Message] from [LeaveMsg] where [id] Not IN (Select Top (3*1) [id] from [LeaveMsg])";//根据SqlStr和cn创建新的SqlCommand对象,引用为cmd变量SqlCommand cmd = new SqlCommand(SqlStr, cn);//调用cmd的ExecuteReader方法,返回数据读取器,引用为drSqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//将dr设置为Rp2控件的数据源
this.Rp2.DataSource = dr;
//将LeaveMsg1数据表对象引用赋值给dt,供*.aspx中访问dt = ds.Tables["LeaveMsg1"];
//绑定页面所有控件的数据
this.DataBind();
//关闭数据读取器,同时关闭数据库连接
dr.Close();
}
//该方法为GView控件的数据页索引变化事件的处理方法protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e){//设置新的页索引
GView.PageIndex = e.NewPageIndex;
//再次调用MyBind方法,绑定页面数据
MyBind();
}
}
}
相关文章
- ASP.NET MVC之持久化TempData及扩展方法(十三)
- Asp.net 中高亮显示搜索关键字简单方法
- 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
- ASP.net 判断上传文件类型的三种方法
- asp.net跳转页面的三种方法比较
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
- ASP.net_form表单提交路径和之前做的其他网站路径都一样,但是提交后显示404错误,找不到页面
- asp.net小数点四舍五入的方法!
- VS2010中asp.net调试.ashx程序错误的一个简单方法!
- Asp.net打开新窗口或实现超级链接的多种方法!(转)
- asp.net小数点【取整】和【四舍五入】的方法!
- ASP.NET Web API中的参数绑定总结
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
- 在ASP.NET MVC中实现区域或城市选择
- ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)
- Developing ASP.NET Core Apps by Using Visual Studio Code
- 《精通 ASP.NET MVC 5》----2.2 创建新的ASP.NET MVC项目
- 《ASP.NET MVC 4 实战》----第 1 章 绪论 1.1 发展阶段
- Autocomplete in ASP.NET MVC3自动检索并填充输入框
- ASP.NET MVC 5 - 查询Details和Delete方法
- ASP.NET综合管理ERP系统100%源代码+所有开发文档
- DevExtreme v 22.1 ASP.NET Core 应用程序项目,配置PivotGrid控件
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)