2010-02-04 72 views
1

我需要在中繼器內部創建一系列動態創建的按鈕。這些按鈕名稱來自數據庫。當用戶點擊一個按鈕時,會出現名稱旁邊的一些隱藏文本。再次點擊後消失。文本必須在html或後面的代碼中定義。從中繼器內部訪問動態創建的元素

下面是一些代碼來演示我在想什麼。

<asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" > 
     <ItemTemplate> 
      <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" 
       Text='<%# Eval("Decision_Type_Dsc") %>' /> 
      <asp:Label ID="DecisionLabel" Visible="false" runat="server" /> 
     <p></p> 
     </ItemTemplate> 
     <AlternatingItemTemplate> 
      <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" 
       Text='<%# Eval("Decision_Type_Dsc") %>' /> 
      <asp:Label ID="DecisionLabel" Visible="false" runat="server" />       <p></p> 
     </AlternatingItemTemplate> 
</asp:Repeater> 

public void BTN_ShowText(Object sender, EventArgs e) 
{ 

    Label TestLabel = (Label)FindControl("DecisionLabel"); 
    Button TestButton = (Button)FindControl("DecisionButton"); 

    switch(TestButton.Text) 
    { 
    case "Dismissed": 
     TestLabel.Text = "Testing 1 2 3"; 
     break; 

    case "Anything": 
     TestLabel.Text = "Testing 2 3 4"; 
     break; 
    } 

    if (TestLabel.Visible == false) 
    { 
     TestLabel.Visible = true; 
    } 
    else 
    { 
     TestLabel.Visible = false; 
    } 

    } 
} 

我知道這是行不通的。我收到了空值。而我需要按鈕的ID,它是相應的標籤。希望這給你一個我想要做的事情的想法。任何建議,特別是如果你提供我的一些代碼來處理讚賞。我想也許使用jQuery?

我是.net/jquery編程的新手。希望有人能幫助我。 謝謝!

回答

1

FindControl是一種可以在任何控件或頁面對象上執行的方法。然而,這不是一個遞歸發現 - 也就是說,如果你把它叫做Page對象上,也不會尋找任何的子控件的ID ..

嘗試在你的BTN_ShowText方法,而不是這樣做:

Button clickedButton = sender as Button; 

Label TestLabel = (Label)clickedButton.Parent.FindControl("DecisionLabel")); 
Button TestButton = (Button)clickedButton.Parent.FindControl("DecisionButton"); 

Parent對象將是按鈕被點擊的中繼器的ItemTemplate實例,因此它應該包含您正在查找的控件。

+0

這工作完美!用我的代碼很容易實現。非常感謝你! – Dave 2010-02-04 22:23:55

0
<asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" OnItemDataBound="Repeater1_DataBound"> 
    <ItemTemplate> 
     <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" /> 
     <asp:Label ID="DecisionLabel" Visible="false" runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 

然後在後面的代碼

protected void Repeater1_DataBound(object sender, RepeaterItemEventArgs e) 
{ 
    (e.Item.FindControl("DecisionButton") as Button).Text 
     = Convert.ToString(e.DataItem["Decision_Type_Dsc"]); 
} 

和你的按鈕事件可能做這樣的事情:

public void BTN_ShowText(Object sender, EventArgs e) 
{ 
    (sender as Button).Text; 
} 

這應該讓你開始。

+0

感謝您的幫助! – Dave 2010-02-04 22:26:01