使用LINQ或任何快速方法从ControlCollection中搜索特定控件
本文关键字:搜索 控件 ControlCollection LINQ 任何快 方法 使用 | 更新日期: 2023-09-27 17:58:07
我有一组控件集合,我正在寻找一种在运行时通过ID添加特定控件的方法,有什么快速、优化的方法可以做到这一点吗?
这是一个代码:
HtmlTableRow row = new HtmlTableRow();
row.ID = string.Format("tr{0}", key);
tableParameters.Rows.Add(row);
HtmlTableCell cellParameterName = new HtmlTableCell();
cellParameterName.ID = string.Format("td{0}", key);
row.Cells.Add(cellParameterName);
Label lblParameterName = new Label();
lblParameterName.ID = string.Format("lblParameter{0}", key);
cellParameterName.Controls.Add(lblParameterName);
lblParameterName.Text = key + ":";
HtmlTableCell cellParameterSelectionControl = new HtmlTableCell();
cellParameterSelectionControl.ID = string.Format("tdSelectionControl{0}", parameterInfos[key].ParameterName);
row.Cells.Add(cellParameterSelectionControl);
Thanx
Control.FindControl
怎么样?
假设您的表ID为tableExample
:
var tr = tableExample.FindControl("tr5");
但请记住,它不是递归的。因此,如果你想得到lblParameter5
,你可以先找到每个父元素,直到那个元素:
var tr = tableExample.FindControl("tr5") as HtmlTableRow;
var td = tr.FindControl("td5") as HtmlTableCell;
var lbl = td.FindControl("lblParemeter5") as Label;
或者,您可以创建一个递归函数来执行此操作。下面是一个使用扩展方法创建递归函数的示例:
public static class MyExtensions
{
public static Control FindById(this Page p, string id)
{
return FindControlRecursive(p, id);
}
private static Control FindByIdRecursive(Control root, string id)
{
if (root.ID == id)
return root;
foreach (Control c in root.Controls)
{
Control c2 = FindByIdRecursive(c, id);
if (c2 != null)
return t;
}
return null;
}
}
所以,你的电话只是:
var lbl = FindById("lblParameter5") as Label;