微软的解决办法 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();
// Paging 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 selCmd = 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; }
prevBtn.Text = "<<"; prevBtn.Size = new Size(48, 24); prevBtn.Location = new Point(92, 240); prevBtn.Click += new EventHandler(Prev_OnClick);
nextBtn.Text = ">>"; nextBtn.Size = new Size(48, 24); nextBtn.Location = new Point(160, 240);
pageLbl.Text = "No Records Returned."; pageLbl.Size = new Size(130, 16); pageLbl.Location = new Point(218, 244);
this.Controls.Add(myGrid); this.Controls.Add(prevBtn); this.Controls.Add(nextBtn); this.Controls.Add(pageLbl); nextBtn.Click += new EventHandler(Next_OnClick);
// Populate DataSet with first page of records and bind to grid. GetData("Default"); DataView custDV = new DataView(custTable, "", "CustomerID", DataViewRowState.CurrentRows); myGrid.SetDataBinding(custDV, ""); }
public static void Prev_OnClick(object sender, EventArgs args) { GetData("Previous"); }