閱讀293 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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(); }   

 

最後更新:2017-04-02 03:42:39

  上一篇:go 關於asp.net mvc中的httpModules 與 httpHandler
  下一篇:go 為政