2010-02-04 6 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; 
    } 

    } 
} 

나는 이것이 작동하지 않는다는 것을 알고있다. nulls가 반환됩니다. 버튼의 ID가 필요한데 해당하는 라벨입니다. 바라기를 이것은 내가하려는 일에 대한 아이디어를 제공합니다. 특히 제안 할 코드를 제공하면 어떤 제안이라도 환영합니다. 아마 jquery를 사용하는 줄 알았습니까?

.net/jquery 프로그래밍을 처음 사용합니다. 잘만되면 누군가 나를 도울 수 있습니다. 감사합니다. 당신이 시작 얻어야한다

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

:

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

와 버튼 이벤트 뒤에 코드에서 다음

답변

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"); 

은 부모 객체는 버튼의 클릭 된 것을 리피터의 ItemTemplate을 인스턴스 될 것입니다.

+0

이것은 완벽하게 작동했습니다! 내 코드로 구현하는 것이 매우 간단합니다. 고마워요! – Dave

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> 

이 뭔가를 할 수 있습니다.

+0

도움을 주셔서 감사합니다! – Dave

관련 문제