Adamancy---2005  
天行健,君子以自强不息。地势坤,君子以厚德载物。

按 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;
   }
}

posted on 2005-06-13 11:16  向.net进军  阅读(724)  评论(0编辑  收藏  举报