关于DataGrid Web Control 动态绑定2--子控件的获取

        使用子控件必须使用dataGrid的模板列,在模板列中选择编辑模板,在ItemTemplate中添加要显示的子控件,此处用CheckBox做示例。
        看代码:
       
        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

包括 DataListRepeaterDataGrid 控件在内的许多数据绑定控件都用作其他(子)控件的容器。当这些控件运行时,它们会生成子控件的多个实例。例如,如果创建包含 Label 控件的 DataList 模板,则在页运行时,该页包含的该 Label 控件的实例数与 DataList 控件数据源中的记录数相同。

注意   使用模板的控件(如 DataListRepeater 控件)会承载模板对象。例如,当 DataList 控件运行时,它会创建 DataListItem 类的多个实例。而这些模板对象又包含单个控件,例如,标签、文本框、按钮,等等。

由于控件可在同一页上多次实例化,而且您可以在不同的页上重复使用控件名称,所以,ASP.NET 页框架提供了确保页上和应用程序中控件具有唯一标识符的机制。它还为您提供了找到这些单个控件的方法,以便您可以在自己的代码中操作它们。

命名容器

可作为其他控件的容器的控件会为其子控件生成“命名容器”或 ID 命名空间。通过提供此命名容器,控件可以保证其子控件的 ID 属性在整个应用程序内是唯一的。(控件通过实现 INamingContainer 接口生成命名容器。)如果在运行时创建了子控件,命名容器将会与子控件的 ID 属性结合,以创建每个子控件的 UniqueID 属性值。因此,UniqueID 会成为控件的完全限定标识符,引用其命名容器以及控件的单个 ID 值。

在上面的示例中,在父级 DataList 控件的命名容器(即命名空间)内创建 Label 控件的多个实例。每个 Label 控件的 UniqueID 属性将反映此命名空间,其格式类似于 DataList1:_ctl:MyLabelDataList1:_ct2:MyLabel 等。

注意   通常,不应该编写使用生成的 UniqueID 属性的值引用控件的代码。您可以将 UniqueID 属性视为句柄(例如,通过将它传递到进程),但不应该指望它拥有特定结构。

每个容器控件都会为其子控件提供命名容器,此外,页本身也会为容器控件的所有子控件提供命名容器。这样,就可以在应用程序内为该页上的所有控件创建唯一的命名空间。

使用 NamingContainer 属性

子控件可以通过 NamingContainer 属性引用其命名容器。此属性会返回 Control 类型的对象,您可以将该对象强制转换为适当的 DataList 控件、DataListItem 对象,等等。

在需要从子控件访问容器控件的属性时,引用命名容器是很有用的。例如,在子控件的 DataBinding 事件的处理程序中,可以通过从命名容器获取 DataItem 对象来访问它。

注意   NamingContainer 属性不需要和 Parent 属性引用相同的控件。例如,在 Repeater 控件中,可能有一个包含表的项模板,而该表又包含 Label 控件。标签的父级控件是表单元格(例如,HtmlTableCell 对象),但其命名容器是 DataListItem 对象,因为是 DataListItem 而不是表定义了 Label 控件的命名空间。
posted on 2006-01-28 11:17  Carlwave-陆飞(Fei.Lu)  阅读(1257)  评论(0编辑  收藏  举报