2013-05-16 3 views
2

사용자가 버튼을 클릭하거나 선택한 라디오 버튼을 변경하면 동적으로 생성 된 컨트롤 (예 : 두 개의 TextBox 및 RadioButtonList)을 참조 할 수 있습니까?동적으로 생성 된 컨트롤을 참조하는 방법은 무엇입니까?

레코드를 데이터베이스에 삽입해야하지만 모든 값이 필요합니다. 컨트롤을 즉시 작성해야하기 때문에 컨트롤을 하드 코딩 할 수 없습니다.

TextBox t1 = new TextBox(); 
PlaceHolder1.Controls.Add(t1); 

TextBox t2 = new TextBox(); 
PlaceHolder1.Controls.Add(t2); 

RadioButtonList rbList = new RadioButtonList(); 
rbList.Items.Add(new ListItem("Today", "1")); 
rbList.Items.Add(new ListItem("This Week", "2")); 
rbList.SelectedIndexChanged += new EventHandler(rbList_SelectedIndexChanged); 

PlaceHolder1.Controls.Add(rbList); 

나는 두 개의 텍스트 상자 및 rbList_SelectedIndexChanged 내에서 RadioButtonList 또는 다른 이벤트를 참조 할 필요가있다. 텍스트 박스에 EventHandler를 추가하는 것은 데이터베이스에 3 개의 값을 모두 삽입해야하므로 좋지 않습니다.

내 생각은 어떻게 든 texboxes의 참조를 rbList_SelectedIndexChanged 이벤트에 전달하는 것이었지만이 작업을 수행하는 방법이 확실하지 않으며 작동 여부가 확실하지 않습니다.

도움을 주시면 감사하겠습니다.

+2

이 컨트롤을 캡슐화하기 위해 UserControl을 만듭니다! 그들의 값에 따라 양쪽 컨트롤을 안은 로직을 넣으십시오! 이 컨트롤을 PlaceHold에 추가하면 이깁니다! http : //msdn.microsoft.com/en-us/library/y6wb1a0e (v = vs.100) .aspx – Fals

+0

이것은 또 다른 좋은 제안입니다. 고맙습니다!! – carny666

+1

@Servy 내가 해냈어! :) – Fals

답변

5

FindControl()으로이 문제를 해결할 수 있다고 생각합니다. 코드 숨김 상자에서 해당 텍스트 상자에 ID를 설정해야합니다.

rbList_SelectedIndexChanged 이벤트에는 PlaceHolder1에 대한 참조가있을 것입니다. 행사 이내에 :

var TextBox1 = (TextBox)Placeholder1.FindControl("{text box 1 ID here}"); 
var TextBox2 = (TextBox)Placeholder1.FindControl("{text box 2 ID here}"); 
+1

그런 다음 ID를 생성하고 이러한 컨트롤이 멀티페어 시간에 생성 될 때 고유한지 확인한 다음 선택 변경 이벤트 핸들러에서 해당 라디오 버튼 목록을 기반으로 텍스트 상자의 ID를 결정하는 방법이 필요합니다. . 그것은 가능합니다. 그러나 그것은 깨지기 쉽고 길보다 더 많은 일을합니다. 컴파일 할 때 ID를 알 수있는 동적 인 컨트롤이 아닌 정적 컨트롤을 사용하는 경우에만 실제로 유용합니다. – Servy

+0

두 개의 텍스트 상자 만 가지고 있기 때문에이 솔루션을 사용할 수 있습니다. 그렇지 않으면 고유 한 ID가 필요합니다. 감사!! – carny666

+0

@ carny666 두 개의 텍스트 상자가있는 경우에는 실제로 동적이 아닙니다. 그들은 정적 컨트롤입니다. – Servy

1

내 inital 생각은 어떻게 든 내가했던 것과 년대 bList_SelectedIndexChanged 이벤트

에 texboxes의 참조를 전달하는 것이 었습니다. 이것은 쉽게 필요한 변수를 통해 닫을 수 있습니다 이벤트 처리기에 대한 익명의 방법을 사용하여 수행됩니다

rbList.SelectedIndexChanged += (s, e) =>selectionChangedHandler(rbList t1, t2); 
+0

스티븐의 솔루션뿐만 아니라 이것을 시도 할 것입니다. – carny666

2

이러한 컨트롤을 캡슐화하는 UserControl을 만듭니다. 값에 따라 두 컨트롤을 모두 저장하려면 일부 로직을 내부에 배치하십시오. 이 사용자 정의 컨트롤을 PlaceHolder에 추가합니다. View this article for further reading

관련 문제