2011-12-12 46 views
1

我正在構建一個價格報價數據表(認爲股票報價表)需要每5秒刷新一次。每行大約有一個股票的一些數據在幾列和每一行的最後一列有LinkButton看到關於特定股票的更多信息。一切正常,但LinkButton。整個表嵌套在UpdatePanel我認爲這是導致該問題的內部。我在這個主題上看到了相當多的帖子,但沒有一篇適合我。LinkBut​​ton在UpdatePanel中不起作用

這裏是我的.aspx代碼:

<asp:ScriptManager ID="ScriptManager" runat="server" /> 
<asp:Timer ID="Timer" OnTick="Timer_Tick" runat="server" Interval="5000" /> 

<div id="itemList"> 
    <asp:UpdatePanel ID="itemPanel" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server"> 
     <Triggers><asp:AsyncPostBackTrigger ControlID="Timer" /></Triggers> 
     <ContentTemplate>  
       <asp:Panel ID="Panel_ItemList" runat="server" width="100%"></asp:Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

和我.aspx.cs代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ... 

    if (!Page.IsPostBack) 
    { 
     updateItemsTable(); 
    } 
} 

protected void LinkButton_Click(object sender, CommandEventArgs e) 
{ 
     Panel_LoginAlert.Visible = true; // <-- THIS IS NOT FIRING!! 
} 

protected void Timer_Tick(object sender, EventArgs e) 
{ 
    updateItemsTable(); 
} 

protected void updateItemsTable() 
{ 
    //... Query my DB 

     if (rdr.HasRows) 
     { 
      Panel_ItemList.Controls.Add(new LiteralControl("<!-- ItemList Panel -->\n")); 

      while (rdr.Read()) 
      { 
       LinkButton lb = new LinkButton(); 
       lb.Text = "Item"; 
       lb.ID = "lbItem_" + strDBitemID; 
       lb.CommandName = strDBitemName; 
       lb.CommandArgument = strDBitemID; 
       lb.Command += new CommandEventHandler(LinkButton_Click); 
       Panel_ItemList.Controls.Add(lb); 
      } 
      Panel_ItemList.Controls.Add(new LiteralControl("<!-- END ItemList Panel -->\n")); 
     } 
    //... 
    conn.Close(); 
} 

所以頁面加載罰款和計時器重新加載表罰款,但LinkButtons做不開火CommandEventHandler。這工作正常,如果我刪除計時器。

事情我已經嘗試:

  1. 我嘗試使用按鈕,而不是了LinkBut​​ton但這並沒有幫助。
  2. 我讀了幾十個帖子說要給LinkBut​​ton控件添加一個ID,但這也沒有幫助。
+0

如果你試圖掩蓋使用鏈接按鈕面板,你可能只是這樣做在JavaScript。 –

回答

1

我相信這個問題是當你添加控件。爲此,需要在Init事件中添加服務器控件,或者覆蓋OnInit(EventArgs)。

而是明確創建控件,你可以更換一箇中繼器的面板。然後將數據庫中的結果綁定到閱讀器。

<asp:Repeater ID="TheRepeater" ...> 
    <ItemTemplate> 
     <asp:LinkButton onClick="LinkButton_Click" ...bind values to properties here /> 
    </ItemTemplate> 
</asp:Repeater> 

背後

TheRepeater.Visible = rdr.HasRows; 
TheRepeater.DataSource = rdr; 
TheRepeater.DataBind(); 

代碼話雖這麼說,如果你想要做的是改變用戶界面,很容易被用jQuery完成。

0

我相信這個問題是在頁面生命週期,因爲你正在創建一個動態控制和page_initpage_load,它沒有得到迷上了正確的控制後加入的情況下,你可以嘗試以下,看看如果它的工作原理:

添加頁面初始化:

protected void Page_Init(object sender, EventArgs e) 
{ 
    updateItemsTable(); 
} 

和計時器滴答事件更改爲:

protected void Timer_Tick(object sender, EventArgs e) 
{ 
    itemPanel.Update(); 
} 

並且應該這樣做。

希望這是幫助。

乾杯。

0

您需要添加回發觸發如下:

<asp:PostBackTrigger ControlID="SearchBrn"/> 
相關問題