2010-10-07 16 views
1

Ok, alors voici la configuration. Je construis une page qui a un listview, un datapager, et 3 datapagerfield (2 x NextPreviousPagerField, 1 x NumericPagerField), et un objectdatasource pour marier tout ceci ensemble.SelectMethod dans objectDatasource étant appelé plusieurs fois avec plusieurs datapagerfield

Tout fonctionnait bien jusqu'à ce que je mette un point d'arrêt dans le SelectMethod spécifié dans le contrôle objectdatsource. Il semble que pour chaque contrôle datapagerfield, il appelle la méthode selectmethod et selectcount. Ainsi, chaque fois qu'un utilisateur paginait, il appelait la base de données 6 fois au lieu de 2 (je n'ai pas de cache activé sur atm). Si j'enlève un champ de données, il supprimera 2 appels.

Maintenant c'est construit dans asp.net 3.5 SP1 dans VS2008. Lorsque j'ai copié les mêmes fichiers de code sur une solution asp.net 4.0 VS2010, l'appel en double semble avoir disparu.

Est-ce un bug dans asp.net 3.5 SP1?

Merci à l'avance

Répondre

5

En fait, vous devriez utiliser l'événement OnSelecting.

Qu'est-ce qui se passe est que ObjectDataSource appelle la méthode selectMethod deux fois

  1. première fois, il obtient les données.
  2. La prochaine fois que cela sera compté.

Je pense que vous devez mettre en œuvre l'événement OnSelecting

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

puis annuler l'événement lorsque le ObjectDataSource essaie d'appeler la méthode de comptage.

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

Vous pouvez utiliser le lien ci-dessous afin qu'un autre appel db ne soit pas effectué pour récupérer le nombre. http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

Espérons que cela aide.