我有一個GridView綁定到ObjectDataSource。我看到,SelectMethod和SelectCountMethod被觸發兩次。 在GridView RowDataBound中,我有gv.ShowFooter = false; 當我評論這一行時,事件只會觸發一次。爲什麼會發生?如何解決它?我不明白,爲什麼隱藏數據綁定控件結果中的一個元素是重新綁定ObjectDataSource?ObjectDataSource + GridView =觸發兩次
0
A
回答
0
RowDataBound
當GridView獲取數據綁定時(表示觸發SelectMethod),會觸發事件。
現在,切換屬性如ShowFooter
需要網格重新創建行,這意味着再次綁定數據。這就是爲什麼對象數據源會再次被觸發的原因。
解決方法是先設置ShowFooter屬性(而不是RowDataBound)。如果這不可行,那麼將對象數據源類中的邏輯放到緩存數據中,這樣就不必訪問數據存儲兩次。例如,
// Code Behind Class
public partial class MyPage : System.Web.UI.Page
{
private object _data;
public static object SelectData()
{
// get the current page instance
var page = HttpContext.Current.CurrentHandler as MyPage;
if (null != page._data)
{
return page._data;
}
// logic to retrieve the data
...
_data = ...
return _data;
}
...
private void RefreshGrid()
{
_data = null; // force the data-source to go to database again
grid.DataBind();
}
}
聲明:僅用於說明目的的未測試的代碼
所以,在上面的代碼中,對頁代碼隱藏用於獲取數據的靜態方法。並且頁面類中的局部變量用於緩存數據。另請注意,如果要刷新網格,則可能需要先在網格上調用DataBind方法之前清除該變量。
相關問題
- 1. gridview + objectdatasource selectmethod調用兩次
- 2. KeyUp - 觸發兩次
- 3. AlarmManager觸發兩次
- 4. SystemEvents.TimeChanged觸發兩次
- 5. switchstatement觸發兩次
- 6. 'onbeforeunload'兩次觸發
- 7. SDL_KEYDOWN觸發兩次
- 8. addEventListener觸發兩次
- 9. 的GridView和ObjectDataSource
- 10. Rowdatabind gridview發射兩次
- 11. ObjectDataSource在嵌套GridView中調用多次
- 12. Gridview和objectdatasource問題
- 13. jQuery觸發點擊觸發兩次
- 14. GridView RowCommand事件在UpdatePanel中觸發兩次
- 15. 級聯DropDownList GridView ObjectDataSource
- 16. GridView和ObjectDataSource問題
- 17. JavaScript事件觸發兩次
- 18. UITextField shouldChangeCharactersInRange觸發兩次?
- 19. jQuery事件觸發兩次
- 20. JSlider事件觸發兩次
- 21. Silverlight NumericUpDown ValueChanging兩次觸發
- 22. jquery插件兩次觸發
- 23. 觸發兩次的事件
- 24. vLine:recv:im已觸發兩次
- 25. Django pre_save被觸發兩次
- 26. Java:myComboBoxItemStateChanged被觸發兩次?
- 27. ajax後觸發兩次
- 28. Android NotificationListenerService onNotificationPosted觸發兩次
- 29. jQuery.one()被觸發兩次
- 30. UnitTests和iOs:viewDidLoad觸發兩次