如果从代码后面分配select命令,SqlDataSource如何工作?

时间:2014-02-03 09:43:18

标签: c# asp.net gridview pagination sqldatasource

我使用SqlDataSource绑定gridview,并且我将SQL select命令从代码后面分配给SqlDataSource。我还在我的GridView中启用了页面大小为25的分页。

现在我想知道的是,如果我从代码中分配查询,那么SqlDataSource会处理分页。我的意思是它应该根据所选的页码一次获取25条记录。

我担心因为我的GridViewis显示数据太慢而且我觉得SqlDataSource正在获取所有9174条记录(我的查询的结果集)并在第一页显示其中的前25条。当我切换到第二页时,看起来它再次获取所有9174条记录并显示接下来的25条记录。

任何人都可以帮助我理解我所假设的是正确的还是我的情况不同。

2 个答案:

答案 0 :(得分:1)

是的,你是对的。它获取所有记录,然后获取指定页面索引的25条记录。 如果您觉得效率低下,那么您必须手动执行此操作。首先获取记录数(在您的情况下为9174),然后9174/25是页数。加载网格时只获得前25条记录并将其显示在网格中。还可手动添加下一个和上一个按钮进行导航。根据当前页面(比方说6)如果下一页点击(想要将7页数据151记录到175记录)那么得到那25条记录并在下一步按钮单击中绑定它。像这样,您必须通过维护当前页码来手动执行此操作。

答案 1 :(得分:0)

如果您这样做,请在选择事件中设置数据源:

protected void MyDataSourceSelecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Result = SomeIqueryableValue;
}

然后网格将使用IQueryable延迟执行自动处理分页。