您的位置:首页 > 其它

大数量查询分页显示 微软的解决办法

2007-03-12 00:00 441 查看
微软的解决办法

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;

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

{

// Initialize controls and add to form.

this.ClientSize = new Size(360, 274);

this.Text = "NorthWind Data";
myGrid.Location = new Point(10,10);

myGrid.Size = new Size(340, 220);

myGrid.AllowSorting = true;

myGrid.CaptionText = "NorthWind Customers";

myGrid.ReadOnly = true;

myGrid.AllowNavigation = false;

myGrid.PreferredColumnWidth = 150;
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");

}
public static void Next_OnClick(object sender, EventArgs args)

{

GetData("Next");

}

}
public class Sample

{

static void Main()

{

Application.Run(new PagingSample());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: