2013. 6. 18. 16:17

 

이전 글에서 'DataList'의 템플릿을 동적으로 지정한경우 바인딩된 컨트롤을 찾을수 없다는 이야기를 하였습니다.

( 참고 : [Asp.Net] DataList - DataList의 컬럼을 미리 만들어둔 템플릿으로 교체하기)

 

그런데.....글을 쓰고 하루만에 해결방법을 찾았네요 ㅎㅎㅎㅎ

 

 

1. 문제

이전 글에서 처럼 템플릿을 추가하면 컨트롤을 찾을 수 없습니다.

 

 

그런데 생각해보면 당연한 결과입니다.

여기서 'Itme.FindControl'을 하면 우리가 추가한 템플릿만 검색이 됩니다.

 

즉, 우리가 필요한건 템플릿을 찾고 그다음 컨트롤을 검색해야 한다는 것입니다.

 

 

2. 문제 해결

그런데 여기서 또 문제가

'동적으로 생성된 컨트롤의 이름을 어떻게 확인하는가?'

입니다.

 

 

2-1. 동적으로 추가된 컨트롤의 이름 찾기

 

동적으로 로드한 템플릿을  확인 해보 아도 별다른 내용이 없습니다.

 

 

 

 

 

이럴때는 바인딩 되고 있을때 중단점을 잡아 확인해 보아야 합니다.

 

UI로 따라 들어가면 보이지 않고 '직접 식행 창'에 명령어를 써서 확인 할 수 있습니다.

 

(1) 먼저 'e.Item.Controls.Count'를 입력하여 템플릿이 있는지 확인 해 봅니다.

1개 이하로 있다면 템플릿이 추가 되지 않은 것입니다-_-;;

(2) 1개 라면 'e.Item.Controls[0].NamingContainer.ID'를 입력하면 동적으로 추가된 템플릿의 이름을 확인 할수 있습니다.

 

 

(3) 2개 이상이라면 번거롭지만 하나하나 열어서 확인해야 하죠 ㅡ,.ㅡ;;

'e.Item.Controls[0].Controls'

이런식으로 입력하여 내용물을 보고 판단하시면 됩니다.

 

 

2-2. 동적으로 추가된 템플릿에서 컨트롤 찾기

이제 동적으로 추가된 템플릿의 이름을 찾았으니 'FindControl'로 해당 템플릿을 찾으면 됩니다.

 

((TextBox)e.Item.FindControl("ctl00").FindControl("TextBox1")).Text = "dddddddddd";

 

이렇게 말이죠.

 

 

3. 테스트

이제 테스트를 해봅시다.

 

 

잘되네요.

 

마무리

이건뭐....

검색어 잡기가 힘들어서 못찾고 있다가.....

결국 동적으로 생성된 컨트롤의 ID에 관련된 MSDN을 보고 힌트를 얻어 찾았습니다 ㅡ,.ㅡ;;;

 

동적으로 바인딩되는 컨트롤의 경우 바인딩되는 순서가 달라지면 'ID'가 달라질 수 있습니다.

그점 주의해서 코드를 짜셔야 합니다.