2009-07-11 17 views
0

我使用裏面有DataList元素的UpdatePanel。我想每10次更新DB的內容。我注意到只有在回發後更新發生。我不喜歡C#如何在Timer.Tick事件上引發PostBack?

<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> 

的代碼在後面的代碼我tryed使用RaisePostBackEvent方法,但得到堆棧溢出異常...

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

回答

3

請記住,所有的代碼隱藏只在服務器上執行。因此,如果Timer1_Tick()方法正在運行,那麼您的計時器引發回發。

你得到一個StackOverflowException運行該方法的原因是因爲它只是無限調用自己。您需要將更新代碼放在該方法中,而不是再次遞歸調用它。

0

看看setTimeout()和setInterval()javascript函數。這一切都需要發生在客戶端,而不是服務器端。

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

問題解決了數據重裝