2009-07-11 6 views
0

J'utilise UpdatePanel avec l'élément DataList à l'intérieur. Je veux mettre à jour le contenu de DB toutes les 10 secunds. J'ai remarqué que la mise à jour se produit seulement après la publication. Je l'ai fait le code commeC# Comment faire pour augmenter l'événement PostBack on Timer.Tick?

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
     </Triggers> 
     <ContentTemplate> 
       <asp:DataList ID="lstComputers" runat="server" DataKeyField="ComputerID" DataSourceID="ComputersDataSource" 
        OnItemDataBound="lstComputers_ItemDataBound" OnItemCommand="lstComputers_ItemCommand"> 
        <HeaderTemplate> 

        // Header data 

        </HeaderTemplate> 
        <ItemTemplate> 

        // Item template 

        </ItemTemplate> 
       </asp:DataList> 

         <asp:UpdateProgress ID="UpdateProgress2" runat="server"> 
          <ProgressTemplate> 
           <img border="0" src="images/loading.gif" /> 
          </ProgressTemplate> 
         </asp:UpdateProgress> 

     </ContentTemplate> 
    </asp:UpdatePanel> 

Dans le code derrière i tryed d'utiliser la méthode RaisePostBackEvent mais eu exception de débordement de pile ...

protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     this.RaisePostBackEvent(Timer1, ""); 
    } 

Répondre

3

Rappelez-vous que tout votre code-behind est exécuté uniquement sur le serveur. Par conséquent, si la méthode Timer1_Tick() est en cours d'exécution, puis votre minuteur est élever un PostBack. La raison pour laquelle vous obtenez une exception StackOverflowException lors de l'exécution de cette méthode est qu'elle s'exécute simplement elle-même, à l'infini. Vous devez placer votre code de mise à jour dans cette méthode, ne pas l'appeler à nouveau récursivement.

0

Jetez un oeil aux fonctions javascript setTimeout() et setInterval(). Tout doit se passer sur le client, pas sur le serveur.

-3
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    lstComputers.DataBind(); 
} 

résolu le problème avec les données rechargeant

Questions connexes