SQL Server 2000Visual Studio .NET 2003.NET 1.1ADO.NETWindows Forms中级开发Visual StudioSQL ServerSQLWindows.NETC#
使用 DataReader 的 DataGrid 分页 - C# Windows 窗体
使用 DataReader 进行 DataGrid 分页。
引言
这是一个使用 C# 对 Windows Forms DataGrid
进行分页的示例。 在演示中,我使用了 Microsoft SQL Server 2000 数据库。
使用代码
创建表
CREATE TABLE tblEmp (E_ID int PRIMARY KEY, E_Name varchar(60),
E_Salary money, E_DOJ datetime)
GO
公共变量
// Protected Connection.
protected SqlConnection mcnSample;
// Page
private int mintTotalRecords = 0;
private int mintPageSize = 0;
private int mintPageCount = 0;
private int mintCurrentPage = 1;
// Connection String
protected const string CONNECTION_STRING =
"Server=localhost;UID=sa;PWD=;Database=Sample";
fillGrid()
方法
private void fillGrid()
{
// For Page view.
this.mintPageSize = int.Parse(this.tbPageSize.Text);
this.mintTotalRecords = getCount();
this.mintPageCount = this.mintTotalRecords / this.mintPageSize;
// Adjust page count if the last page contains partial page.
if (this.mintTotalRecords % this.mintPageSize > 0)
this.mintPageCount++;
this.mintCurrentPage = 0;
loadPage();
}
getCount()
方法:此方法比 SELECT COUNT(*)
语句获取记录数的速度更快。
private int getCount()
{
// This select statement is very fast compare to SELECT COUNT(*)
string strSql = "SELECT Rows FROM SYSINDEXES WHERE " +
"Id = OBJECT_ID('tblEmp') AND IndId < 2";
int intCount = 0;
SqlCommand cmd = this.mcnSample.CreateCommand();
cmd.CommandText = strSql;
intCount = (int) cmd.ExecuteScalar();
cmd.Dispose();
return intCount;
}
loadPage()
方法
private void loadPage()
{
string strSql = "";
int intSkip = 0, i = 0;
SqlDataReader dr;
DataSet ds;
DataTable dt;
intSkip = (this.mintCurrentPage * this.mintPageSize);
strSql = "SELECT * FROM tblEmp";
SqlCommand cmd = this.mcnSample.CreateCommand();
cmd.CommandText = strSql;
dr = cmd.ExecuteReader();
ds = new DataSet();
dt = ds.Tables.Add("tblEmp");
// Add the table columns.
for (i = 0; i < dr.FieldCount; i++)
dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i));
int intIdx = 0;
while (dr.Read())
{
if (intIdx >= intSkip)
{
DataRow r = dt.NewRow();
// Assign DataReader values to DataRow.
for (i = 0; i < dr.FieldCount; i++)
r[i] = dr[i];
dt.Rows.Add(r);
}
if ((intIdx - intSkip) >= (this.mintPageSize - 1))
break;
intIdx++;
}
dr.Close();
// Populate Data Grid
this.dgEmp.DataSource = ds.Tables["tblEmp"].DefaultView;
// Show Status
this.lblStatus.Text = (this.mintCurrentPage + 1).ToString() +
" / " + this.mintPageCount.ToString();
cmd.Dispose();
ds.Dispose();
}
以下是页面导航的代码
private void goFirst()
{
this.mintCurrentPage = 0;
loadPage();
}
private void goPrevious()
{
if (this.mintCurrentPage == this.mintPageCount)
this.mintCurrentPage = this.mintPageCount - 1;
this.mintCurrentPage--;
if (this.mintCurrentPage < 1)
this.mintCurrentPage = 0;
loadPage();
}
private void goNext()
{
this.mintCurrentPage++;
if (this.mintCurrentPage > (this.mintPageCount - 1))
this.mintCurrentPage = this.mintPageCount - 1;
loadPage();
}
private void goLast()
{
this.mintCurrentPage = this.mintPageCount - 1;
loadPage();
}
历史
- 发布于 2006 年 11 月 9日。