2010-10-07 85 views
1

好吧,這裏是設置。我正在構建一個包含listview,datapager和3 datapagerfield(2 x NextPreviousPagerField,1 x NumericPagerField)的頁面,以及一個將所有這些集中在一起的objectdatasource。SelectMethod在objectDatasource中多次調用多個數據引用字段

這一切都工作正常,直到我把一個斷點到objectdatsource控件中指定的SelectMethod。對於每個datapagerfield控件,它似乎都調用了selectmethod和selectcount方法。因此,無論何時一個用戶分頁,它調用數據庫6次而不是2次(我沒有緩存打開atm)。如果我刪除一個數據填充字段,它將刪除2個呼叫。

現在這是建立在VS2008的asp.net 3.5 SP1。當我將相同的代碼文件複製到一個asp.net 4.0 VS2010解決方案時,它重複的調用似乎已經消失。

這是asp.net 3.5 SP1中的錯誤嗎?

在此先感謝

回答

5

其實你應該使用OnSelecting事件。

會發生什麼事是,ObjectDataSource控件調用該方法SelectMethod 兩次

  1. 第一次獲取數據。
  2. 下次獲得計數。

所以我認爲你必須實現OnSelecting事件

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

,然後取消該事件時,將ObjectDataSource嘗試調用計數方法。

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

希望這會有所幫助。