关于DataGrid Web Control 动态绑定2--子控件的获取
看代码:
Dim i As Int32
Dim checkBox As checkBox
For i = 0 To dgMsg.Items.Count - 1
checkBox = CType(dgMsg.Items(i).FindControl("chkBox"), checkBox)
I if checkBox.Checked = True Then
'循环选取DataGrid中的所有CheckBox的属性,此处插入代码
End If
Next
由于DataGrid会自动为每一行生成一个CheckBox的控件,所以不能使用其定义的ID去调用他,这里引用一段MSDN中的话:
Web 窗体页上的每个控件必须是可唯一标识的。通常,给控件的 ID 属性赋值可唯一地标识该控件。该值将成为控件的实例名称(即,在代码中引用控件所依据的名称)。例如,如果将 TextBox 控件的 ID 属性设置为“Text1”,则可在代码中将该控件引用为 Text1
。
包括 DataList、Repeater 和 DataGrid 控件在内的许多数据绑定控件都用作其他(子)控件的容器。当这些控件运行时,它们会生成子控件的多个实例。例如,如果创建包含 Label 控件的 DataList 模板,则在页运行时,该页包含的该 Label 控件的实例数与 DataList 控件数据源中的记录数相同。
注意 使用模板的控件(如 DataList 和 Repeater 控件)会承载模板对象。例如,当 DataList 控件运行时,它会创建 DataListItem 类的多个实例。而这些模板对象又包含单个控件,例如,标签、文本框、按钮,等等。
由于控件可在同一页上多次实例化,而且您可以在不同的页上重复使用控件名称,所以,ASP.NET 页框架提供了确保页上和应用程序中控件具有唯一标识符的机制。它还为您提供了找到这些单个控件的方法,以便您可以在自己的代码中操作它们。
命名容器
可作为其他控件的容器的控件会为其子控件生成“命名容器”或 ID 命名空间。通过提供此命名容器,控件可以保证其子控件的 ID 属性在整个应用程序内是唯一的。(控件通过实现
在上面的示例中,在父级 DataList 控件的命名容器(即命名空间)内创建 Label 控件的多个实例。每个 Label 控件的 UniqueID 属性将反映此命名空间,其格式类似于 DataList1:_ctl:MyLabel
、DataList1:_ct2:MyLabel
等。
注意 通常,不应该编写使用生成的 UniqueID 属性的值引用控件的代码。您可以将 UniqueID 属性视为句柄(例如,通过将它传递到进程),但不应该指望它拥有特定结构。
每个容器控件都会为其子控件提供命名容器,此外,页本身也会为容器控件的所有子控件提供命名容器。这样,就可以在应用程序内为该页上的所有控件创建唯一的命名空间。
使用 NamingContainer 属性
子控件可以通过
在需要从子控件访问容器控件的属性时,引用命名容器是很有用的。例如,在子控件的 DataBinding 事件的处理程序中,可以通过从命名容器获取 DataItem 对象来访问它。
注意 NamingContainer 属性不需要和 Parent 属性引用相同的控件。例如,在 Repeater 控件中,可能有一个包含表的项模板,而该表又包含 Label 控件。标签的父级控件是表单元格(例如,HtmlTableCell 对象),但其命名容器是 DataListItem 对象,因为是 DataListItem 而不是表定义了 Label 控件的命名空间。