Microsoft's solution
using System; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Windows.Forms; public class PagingSample: Form {// Form controls Button prevBtn = new Button (); Button nextBtn = new. Button (); static datagrid mygrid = new datagrid (); static label Pagelbl = new label (); // paning variables. Static int pageSize = 10; // size of viewed page. Static int totalpages = 0; // Total Pages . static int currentPage = 0; // Current page static string firstVisibleCustomer = ".";. // First customer on page to determine location for move previous static string lastVisibleCustomer = ""; // Last customer on page to determine location for move . next // DataSet to bind to DataGrid static DataTable custTable;. // Initialize connection to database and DataAdapter static SqlConnection nwindConn = new SqlConnection. ( "Data Source = localhost; Integrated Security = SSPI; Initial Catalog = northwind"); static SqlDataAdapter Custda = New SqldataAdapter ("", nwindconn); static SQLCommand SE lCmd = custDA.SelectCommand; public static void GetData (string direction) {// Create SQL statement to return a page of records selCmd.Parameters.Clear (); switch (direction) {case "Next":. selCmd.CommandText = " SELECT TOP " pageSize " CustomerID, CompanyName FROM Customers " " WHERE CustomerID> @CustomerId ORDER BY CustomerID "; selCmd.Parameters.Add (" @ CustomerId ", SqlDbType.VarChar, 5) .Value = lastVisibleCustomer; break; case "Previous": Selcmd.comMandtext = "SELECT TOP" Pagesize "Customerid, CompanyName from Customers" "
WHERE CustomerID <@CustomerId ORDER BY CustomerID DESC "; selCmd.Parameters.Add (" @ CustomerId ", SqlDbType.VarChar, 5) .Value = firstVisibleCustomer; break; default: selCmd.CommandText =" SELECT TOP " pageSize " CustomerID , CompanyName FROM Customers ORDER BY CustomerID ";. // Determine total pages SqlCommand totCMD = new SqlCommand (" SELECT Count (*) FROM Customers ", nwindConn); nwindConn.Open (); int totalRecords = (int) totCMD.ExecuteScalar ( ); nwindconn.close (); Totalpages = (int) math.ceiling (Double) TotalRecords / Pagesize; Break;} // Fill A Temporary Table with Query Results. DataTable TMPTABLE = New DataTable ("Customers"); int recordsAffected = custDA.Fill (tmpTable); // If table does not exist, create it if (custTable == null) custTable = tmpTable.Clone ();. // Refresh table if at least one record returned if (recordsAffected>. 0) {Switch (Direction) {CASE "Next": CURRENTPAGE ; Break; Case "Previous": currentpage ---; break; default: currentpage = 1; break;} Pagelbl.text = "Page " CurrentPage " of " totalPages;. // Clear rows and add new results custTable.Rows.Clear (); foreach (DataRow myRow in tmpTable.Rows) custTable.ImportRow (myRow); // Preserve first and last primary Key Values. DataRow [] ORDROWS = CustTable.select ("" "Customerid ASC"); firstvisiblecustomer = ordrows [0] [0] .tostring (); lastvisiblecustomer = ordrows [CustTable.Rows.count - 1] [0] .Tostring ();}} public paningsample ()} public pagingsample () {// Initialize controls and add to form. This.clientsize = new size (360, 274); this.text = "northwind data";