2010-02-04 53 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