ObjectDataSource自定义分页

简介:

ObjectDataSource是唯一支持自定义分页的数据源,要实现分页效果,首先要将ObjectDataSource.EnablePageing属性设为true,通过三个属性实现:StartRowIndex,MaximumRows和SelectCountMethod,效果如图:

 

实现分页有两种情况:一种是假分页,一种是真分页;

假分页:就是将数据全部取出来,只是分页显示,它不是分页取数据,只是分页显示。

真分页:就是按需取数据,只取出每一页所需的数据;这里是使用存储过程做的是真分页。

首先,最重要的是使用到的存储过程:(以NorthWind数据库为例)

ALTER PROCEDURE GetEmployeePage @Start int, @Count int AS -- 创建一张临时表,增加ID属性列。 CREATE TABLE #TempEmployees ( ID int IDENTITY PRIMARY KEY, EmployeeID int, LastName nvarchar(20), FirstName nvarchar(10), TitleOfCourtesy nvarchar(25), ) -- 用employees表的相关字段来填充临时表。 INSERT INTO #TempEmployees ( EmployeeID, LastName, FirstName, TitleOfCourtesy ) SELECT EmployeeID, LastName, FirstName, TitleOfCourtesy FROM Employees ORDER BY EmployeeID ASC -- 声明两个变量来计算的记录的范围。 DECLARE @FromID int DECLARE @ToID int -- 计算我们需要的第一个和最后一个编号的各种记录。 SET @FromID = @Start SET @ToID = @Start + @Count - 1 -- 查找一页显示的内容。 SELECT * FROM #TempEmployees WHERE ID >= @FromID AND ID <= @ToID

其次,就是调用存储过程的数据访问类:

public class EmployeesPager { public EmployeesPager() { } private string connectionString; public List<EmployeeDetails> GetEmployees(int startRowIndex, int maximumRows) { connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("GetEmployeePage", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Start", SqlDbType.Int, 4)); cmd.Parameters["@Start"].Value = startRowIndex +1; cmd.Parameters.Add(new SqlParameter("@Count", SqlDbType.Int, 4)); cmd.Parameters["@Count"].Value = maximumRows; // Create a collection for all the employee records. List<EmployeeDetails> employees = new List<EmployeeDetails>(); try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { EmployeeDetails emp = new EmployeeDetails( (int)reader["EmployeeID"], (string)reader["FirstName"], (string)reader["LastName"], (string)reader["TitleOfCourtesy"]); employees.Add(emp); } reader.Close(); return employees; } catch (SqlException err) { // Replace the error with something less specific. // You could also log the error now. throw new ApplicationException("Data error."); } finally { con.Close(); } } }

最后,就是前台界面调用这个访问类的方法:

protected void Page_Load(object sender, EventArgs e) { EmployeesPager emp = new EmployeesPager(); GridView1.DataSource = emp.GetEmployees(0, 5);//默认显示前5条记录; GridView1.DataBind(); if (!IsPostBack) { for (int i = 1; i < 10; i++) { DropDownList1.Items.Add(i.ToString()); } } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { EmployeesPager emp = new EmployeesPager(); GridView1.DataSource = emp.GetEmployees((Convert.ToInt32(DropDownList1.SelectedItem.Text)-1),3); GridView1.DataBind(); }   

 

目录
相关文章
|
2月前
|
前端开发
bladex自定义分页
bladex自定义分页
23 0
|
JavaScript 测试技术
Easyui datagrid 修改分页组件的分页提示信息为中文
Easyui datagrid 修改分页组件的分页提示信息为中文
63 0
|
数据库 C# 数据库管理
C#:Winfrom 实现DataGridView 自定义分页
今天给大家分享Winform实现DataGridView 自定义分页的案例,感兴趣的朋友可以一起来学习一下。 采用技术:C\#+Winform+Dapper+SQLite。
C#:Winfrom 实现DataGridView 自定义分页
|
JavaScript 搜索推荐 前端开发
【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)
适用场景   先说一下伪URL分页的适用场景。在网站的网页里实现查询功能,如果查询条件比较少的话,还比较好办,把查询条件放到URL里面传递即可。但是如果查询条件过多,就会照成URL的长度过长。既不好看,编写起来也很麻烦。
1131 0
|
.NET 开发框架 Go
GridView控件自定义分页的实现
前人栽树,后人乘凉,话不多说,代码如下:     实现方式一: .aspx: [c-sharp] view plain copy <form id="form1" runat="server">       <table style="width: 605px">         .
1414 0
|
Web App开发 JavaScript 前端开发