ObjectDataSource自定义分页

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

ObjectDataSource自定义分页

 

ObjectDataSource自定义分页ObjectDataSource自定义分页

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

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

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

首先,最重要的是使用到的存储过程:(以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(); }   

 

上一篇:Linux&shell之处理用户输入


下一篇:C#3.0的一些新特性