我有一个名为pnlCategories的ASP.NET面板。我要做的是创建一个函数,返回在此面板中检查的所有复选框的列表通用列表。还有其他子控件(包括其他面板和表),此函数必须遍历以查找所有复选框。任何人有任何想法如何做到这一点?顺便说一下,这是C#。
答案 0 :(得分:2)
简单,也未经测试。这可以适用于仅收集控件ID,但这是一个可重用的,并且在公共库中是一个很好的。
public static void FindControlsRecursive(Control root, Type type, ref List<Control> list)
{
if(root.Controls.Count != 0)
{
foreach(Control c in root.Controls)
{
if(c.GetType() == type)
list.Add(c);
else if (c.HasControls())
FindControlsRecursive(c, type, ref list);
}
}
}
用法:
var checkboxes = new List<Control>();
FindControlRecursive(pnlCategories, typeof(CheckBox), ref checkboxes);
var ids = checkboxes.Select(c => c.UniqueID).ToList(); // or however you'd like to get them.
答案 1 :(得分:0)
我会说这样的事情(改编)可能会奏效。我没有测试过这个,但它应该让你在某个地方接近。
public List<CheckBox> FindAllCheckBoxControls(WebControl webControl)
{
if(webControl.Controls.Count == 0)
return new List<CheckBox>();
var checkBoxes = webControl.Controls
.Where(x => x.GetType() == typeof(CheckBox));
.Select(x => x as CheckBox)
.ToList();
webControl.Controls.ToList().ForEach(control =>
{
checkBoxes.AddRange(FindAllCheckBoxControls(control));
});
return checkBoxes.Distinct();
}