using System.Data.SqlClient;
using System.Text;在界面上放置一个DataGrid  id = grid
还有一个LinkButton private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
//计算记录的总数
SetVirtualItemCount(); //设置排序的关键字的字段名
ViewState["SortExpression"] = "employeeid"; //设置grid的分页属性 和 每页的行数
grid.AllowPaging = true;
grid.AllowCustomPaging = true;
grid.PageSize = 5; }}
//计算记录的总数
public void SetVirtualItemCount()
{
// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
SqlConnection conn = new SqlConnection(strConn); // Set up the command
String strCmd = "SELECT COUNT(*) FROM Employees";
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
int nItemCount = (int) cmd.ExecuteScalar();
conn.Close(); grid.VirtualItemCount = nItemCount;
return;
}
//每次取数据的过程
SqlDataReader dr;
public SqlDataReader CreateDataSource(int nPageIndex)
{
nPageIndex ++;

String sConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;"; // Prepare the SQL command 
StringBuilder sb = new StringBuilder("");
sb.Append("SELECT TOP {0} * FROM ");
sb.Append("(SELECT TOP {0} employeeid, firstname, lastname FROM Employees ");
sb.Append("WHERE {1} IN ");
sb.Append("(SELECT TOP {2} {1} FROM Employees ORDER BY {1}) ");
sb.Append("ORDER BY {1} DESC) AS tmp ");
sb.Append("ORDER BY {1}");
String strCmd = sb.ToString();  // Set pseudo-parameters: RowsToFetch, SortField and RowsToFetch
// {0} - rowstodisplay      显示的记录条数
// {1} - sortfield          排序关键字段名
// {2} - rowstofetch 从后台取得记录数 int nRowsToDisplay = grid.PageSize;
int nMod = grid.VirtualItemCount % grid.PageSize;
if (nPageIndex == grid.PageCount && nMod >0)
nRowsToDisplay = nMod; strCmd = String.Format(strCmd,  nRowsToDisplay, ViewState["SortExpression"],  
grid.PageSize * nPageIndex); SqlConnection conn = new SqlConnection(sConn);
conn.Open(); SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = strCmd;

dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return dr;
}private void grid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
grid.CurrentPageIndex = e.NewPageIndex;
grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
grid.DataBind();
dr.Close();
}private void LinkButton1_Click(object sender, System.EventArgs e)
{
grid.DataSource = CreateDataSource(0);
grid.DataBind();
}