使用多个datapagerfield多次调用objectDatasource中的SelectMethod

时间:2010-10-07 19:15:19

标签: asp.net listview objectdatasource datapager

好的,这是设置。我正在构建一个页面,其中包含listview,一个datapager和3个datapagerfield(2 x NextPreviousPagerField,1 x NumericPagerField),以及一个objectdatasource来将所有这些结合在一起。

在我将一个断点放入objectdatsource控件中指定的SelectMethod之前,一切正常。对于每个datapagerfield控件,它似乎都在调用selectmethod和selectcount方法。因此,无论何时用户进行分页,它都会调用数据库6次而不是2次(我没有打开缓存atm)。如果我删除一个datapagerfield,它将删除2个调用。

现在这是在VS2008中的asp.net 3.5 SP1中构建的。当我将相同的代码文件复制到asp.net 4.0 VS2010解决方案时,它的重复调用似乎已经消失。

这是asp.net 3.5 SP1中的错误吗?

提前致谢

1 个答案:

答案 0 :(得分:5)

实际上你应该使用OnSelecting事件。

ObjectDataSource调用方法SelectMethod 两次

  1. 第一次获取数据。
  2. 下次获得点数。
  3. 所以我认为你必须实现OnSelecting事件

    <asp:ObjectDataSource ID="ODS" runat="server" SelectMethod="GetList" SelectCountMethod="GetListCount" 
        OnSelecting="ods_Selecting">
        TypeName="Website.Test" EnablePaging="true" /> 
    

    然后在ObjectDataSource尝试调用count方法时取消该事件。

     protected void ods_Selecting(object sender,
                    ObjectDataSourceSelectingEventArgs e)
     {
          if (e.ExecutingSelectCount)
          {
               //Cancel the event   
               return;
          }
    }
    

    您可以使用以下链接,以便不进行另一次数据库调用来获取计数。 http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

    希望这有帮助。