如何使用IndexOf C#在转发器中查找控件

时间:2013-11-28 14:12:05

标签: c# repeater indexof findcontrol items

我想知道是否可以在转发器中找到一个控件但是通过近似。我的意思是,我有一些控件结束“.... EditMode”,我想抓住它们并修改一些属性

像这样的东西

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

2 个答案:

答案 0 :(得分:2)

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

如果我理解你的意愿。

答案 1 :(得分: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;
     }
}
相关问题