按 ID 定位子控件
您可以用这样的方法来获取对特定控件的引用:按分配给它的 ID 搜索其命名容器
下面的示例显示如何定位特定的控件。该示例是 DataGrid 控件中按钮的 Click 事件的处理程序。单击该按钮时,代码搜索当前 DataGrid 项(它是 Label 控件的命名容器)中名为 Label1
的标签。如果找到该标签,则会在页上其他位置的第二个标签 (LabelText
) 中显示其文本。
// C#
private void DataGrid1_ItemCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Label l;
l = (Label) e.Item.FindControl
("Label1");
if(!(l == null) ){
LabelText.Text = l.Text;
}
}
通过审核 Controls 集合定位控件
页上的每个容器控件和页本身都具有可用于定位到单个控件的 Controls 集合。
下面的示例说明如何审核 Controls 集合。该示例假定有一个 Web 窗体页(上面至少有一个 Textbox 控件)、一个 Label 控件和一个按钮。代码会获取 Page 对象的所有子控件。由于这样只会产生几个高级别子控件(包括 HtmlForm 对象),所以该代码还要审核每一个单独的子控件的 Controls 集合。该代码会通过比较每个控件的类型来查找文本框。找到文本框时,它会获取该控件的值并将该值串联成字符串,该字符串会显示在 Label 控件的结尾处。
此示例只查找 Page 对象中包含的控件以及是该页的直接子级的控件。如果文本框是控件的子级,而该控件又是页的子级,则该示例不查找此文本框。例如,如果您将 Panel 控件拖到设计器上,则 Panel 控件将是 Page 包含的 HtmlForm 控件的子级,在此示例中会找到该 Panel 控件。然而,如果您之后将 TextBox 控件拖到 Panel 控件上,此示例不会显示该 TextBox 控件文本,因为该控件既不是页的子级,也不是页的子级的控件的子级。以这种方式审核控件有一种更实用的方法:创建递归方法。一遇到控件,就可调用该方法来审核该控件的 Controls 集合。然而,为清楚起见,没有将以下示例创建为递归函数。
// C#
private void Button1_Click(object sender, System.EventArgs e)
{
string allTextBoxValues = "";
foreach (Control c in Page.Controls)
{
foreach (Control childc in c.Controls)
{
if (childc is TextBox)
{
allTextBoxValues += ((TextBox)childc).Text + ",";
}
}
}
if(allTextBoxValues != "")
{
Label1.Text = allTextBoxValues;
}
}