2013-11-28 2 views
0

리피터에서 컨트롤을 찾을 수 있는지는 근사치로 알고 싶습니다. 내 말은, 나는 "... 한 EditMode"끝이 일부 컨트롤을 가지고 나는 당신의 소원을 이해한다면이IndexOf를 사용하여 리피터에서 컨트롤을 찾는 방법 C#

foreach(RepeaterItem item in repeater1.Items) 
{ 
    HtmlGenericControl divEditMode = item.FindControl("....IndexOf ("EditMode")"); 
    if(divEditMode != null) 
    { 
      divEditMode.Visible = false; 
    } 
} 

답변

2
foreach(RepeaterItem item in repeater1.Items) 
{ 
    foreach (var control in item.Controls) 
    { 
    if(control.ID.EndsWith("EditMode")) 
    { 
      control.Visible = false; 
    } 
    } 
} 

같은 몇 가지 속성을

뭔가를 그들 모두를 잡아 수정할.

1

이 작업을 수행하는 방법은 FindControl을 사용하는 대신 "손으로"컨트롤을 반복하는 것입니다. RepeaterItem의 Controls 컬렉션을 사용하여 모든 컨트롤을 나열하고 해당 ID를 분석 할 수 있습니다.
컨트롤이 트리로 구성되어 있으므로 최상위 컨트롤의 Controls 컬렉션도 재귀 적으로 검사해야합니다. 힌트에 대한

private IEnumerable<Control> GetEditControls(ControlCollection controls) 
{ 
    var lst = new List<Control>(); 
    if (controls == null) 
     return lst; 
    foreach(var ctrl in controls) 
    { 
     if (ctrl.Id.EndsWith("EditMode")) 
      lst.Add(ctrl); 
     lst.AddRange(GetControls(ctrl.Controls); 
    } 
    return lst; 
} 
// ... 
foreach(RepeaterItem item in repeater1.Items) 
{ 
    var divsEditMode = GetEditControls(item.Controls); 
    foreach(var divEditMode in divsEditMode) 
    { 
      divEditMode.Visible = false; 
    } 
} 
+0

작은 뭔가,하지만 두 번째 코드 블록에, 당신은'divsEditMode' 변수의 데이터 유형을 설정할 수 있습니다에'IEnumerable을 ' – Darkzaelus

+0

감사합니다; 고쳤다. – Markus