繁体   English   中英

ASP.NET 2.0网格中的分页改进

[英]Pagination improvements in ASP.NET 2.0 Grids

我目前有一个绑定到具有成千上万条记录的表的数据网格。 我使用现有的asp.net 2.0显示datagrid。 我一次显示十条记录。

我的问题是,每当我尝试访问下一页时,我都会再次从数据库中获取所有记录,然后显示所需的记录。 这会使应用程序变慢。 .net 2.0中是否有功能可以帮助我优化此问题? 我不能使用第三方控件或ajax。

更新我也不能使用SQL一次获取10条记录。 在不更改任何现有业务逻辑或数据检索的情况下,我想这样做。

您可以在SQL和/或存储过程中进行分页。

基本上,您会向sproc传递页面上的项目数以及您所在的页面。 例如,第3页和每页20条记录。

如果可以使用SQL Server 2005或更高版本,则可以使用一些较新的关键字来简化查询。

这是此类查询的简单版本:

SELECT ClientName, RowNumber
FROM (SELECT ClientName, ROW_NUMBER() OVER (ORDER BY ClientName) AS RowNumber
FROM Clients) AS cl
WHERE RowNumber BETWEEN 12 AND 30

您可以将“ 12”和“ 30”以上的值作为输入参数。

这样,您只返回要显示的行。

您可以将数据源保留在会话中。

然后在会话中检查您的DataSource是否为null,然后去获取它。

这样,您仅一次获取数据,并且如果您需要获取新数据(例如,因为您更新了某些内容),只需清空保存数据源的会话变量。

编辑:

这是一个示例的一半尝试,(这意味着我不打算更改页面,因为我假设您已经知道该怎么做)

protected void PageChanging(object sender, GridViewPageEventArgs e)
{
  if(Session["YourSessionVariableForData"] == null)
    Session["YourSessionVariableForData"] = YourDataCall();
  YourGridView.PageIndex = e.NewPageIndex;
  YourGridView.DataSource = ((YourDataType)Session["YourSessionVariableForData"]);
  YourGridView.DataBind();
}

在存储过程中进行分页。 考虑使用ROW_NUMBER()函数。 创建一个将调用存储过程的类,并使用ObjectDataSource将其连接到网格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM