关于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 属性在整个应用程序内是唯一的。(控件通过实现 <?XML:NAMESPACE PREFIX = MSHelp NS = "http://msdn.microsoft.com/mshelp" /> 接口生成命名容器。)如果在运行时创建了子控件,命名容器将会与子控件的 ID 属性结合,以创建每个子控件的 属性值。因此,UniqueID 会成为控件的完全限定标识符,引用其命名容器以及控件的单个 ID 值。

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

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

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

使用 NamingContainer 属性

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

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

注意    NamingContainer 属性不需要和 Parent 属性引用相同的控件。例如,在 Repeater 控件中,可能有一个包含表的项模板,而该表又包含 Label 控件。标签的父级控件是表单元格(例如, HtmlTableCell 对象),但其命名容器是 DataListItem 对象,因为是 DataListItem 而不是表定义了 Label 控件的命名空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值