采用Datagrid属性生成器中的分页方式,我们都会感觉到方便的欣喜。但是,用上面所说的方法,每次页切换时,都会用SELECT * FROM YOURTABLE这样的SQl语句去提取出全部的数据,而没有任何与页有关的筛选器。这大大降低了我们Web程序的效率,也增加了服务器的负担。Datagrid提供的分页特点也变得名不副实。我们希望分页能真正的实现减少每次下载的数据量的功能,就要写代码控制住每次提取的数据量大小。
private void SetGridSource (int StartPosition, string GoToPage)
{
SqlConnection MyConnection = new SqlConnection(YourOwnConnectionString);
SqlCommand MyCommand = null;
switch (GoToPage)
{
case "上一页":
MyCommand = new
SqlCommand("SELECT TOP 5 * FROM Table WHERE column1 >= @ID ORDER BY column1",MyConnection);
if (StartPosition == 0)
MyCommand.Parameters.Add("@ID",SqlDbType.NVarChar, 10).Value = "";//这里参数10是ID字段的长度
else
MyCommand.Parameters.Add("@ID",SqlDbType.NVarChar,10).Value =
ViewState[(DataGrid1.CurrentPageIndex + 1).ToString()];
break;
case "下一页":
MyCommand = new
SqlCommand("SELECT TOP 5 * FROM Table WHERE column1 > @ID ORDER BY column1",MyConnection);//注意:这里用的是>,不是>=哟
MyCommand.Parameters.Add("@ID", SqlDbType.NVarChar,10).Value = DataGrid1.Items[4].Cells[0].Text;//Items[4]表示第5行即每页显示的最后一行
break;
}
MyConnection.Open();
SqlDataReader dr = MyCommand.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
dr.Close();
MyConnection.Close();