频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Asp.net—递归方式的FindControl

来源:中国IT实验室 作者:佚名 出处:巧巧读书 2008-05-15 进入讨论组

一般 FindControl 方法,大都是以 ID 寻找控件的第一阶的子控件(若控件有多载 FindControl 方法则例外)。之前有发表过一篇「
递归方式的 FindControl」的文章,它是以递归方式逐层往下去执行 FindControl,找到指定 ID 的控件。
此篇文章是提供进阶版的 FindControl,此方法一样是以递归方式逐层往下去执行 FindControl,不过它不限只能以 ID 去寻找控件,而是指定「型别、属性名称、属性值」去寻找符合的控件。

 1Asp.net—递归方式的FindControl(图一)Asp.net—递归方式的FindControl(图二)    /**/''' <summary>
 2Asp.net—递归方式的FindControl(图三)    ''' 递归寻找符合条件的控件。
 3Asp.net—递归方式的FindControl(图三)    ''' </summary>
 4Asp.net—递归方式的FindControl(图三)    ''' <param name="Parent">父控件。</param>
 5Asp.net—递归方式的FindControl(图三)    ''' <param name="Type">欲寻找的控件型别。</param>
 6Asp.net—递归方式的FindControl(图三)    ''' <param name="PropertyName">比对的属性名称。</param>
 7Asp.net—递归方式的FindControl(图四)    ''' <param name="PropertyValue">比对的属性值。</param>
 8Asp.net—递归方式的FindControl(图一)Asp.net—递归方式的FindControl(图二)    Public Overloads Shared Function FindControlEx()Function FindControlEx(ByVal Parent As System.Web.UI.Control, ByVal Type As System.Type, _
 9Asp.net—递归方式的FindControl(图三)        ByVal PropertyName As String, ByVal PropertyValue As Object) As Object
10Asp.net—递归方式的FindControl(图三)        Dim oControl As System.Web.UI.Control
11Asp.net—递归方式的FindControl(图三)        Dim oFindControl As Object
12Asp.net—递归方式的FindControl(图三)        Dim oValue As Object
13Asp.net—递归方式的FindControl(图三)
14Asp.net—递归方式的FindControl(图三)        For Each oControl In Parent.Controls
15Asp.net—递归方式的FindControl(图三)            If Type.IsInstanceOfType(oControl) Then
16Asp.net—递归方式的FindControl(图三)                '取得属性值
17Asp.net—递归方式的FindControl(图三)                oValue = GetPropertyValue(oControl, PropertyName)
18Asp.net—递归方式的FindControl(图三)                If oValue.Equals(PropertyValue) Then
19Asp.net—递归方式的FindControl(图三)                    Return oControl '型别及属性值皆符合则回传此控件
20Asp.net—递归方式的FindControl(图三)                End If
21Asp.net—递归方式的FindControl(图三)            Else
22Asp.net—递归方式的FindControl(图三)                If oControl.Controls.Count > 0 Then
23Asp.net—递归方式的FindControl(图三)                    '递归往下寻找符合条件的控件
24Asp.net—递归方式的FindControl(图三)                    oFindControl = FindControlEx(oControl, Type, PropertyName, PropertyValue)
25Asp.net—递归方式的FindControl(图三)                    If oFindControl IsNot Nothing Then
26Asp.net—递归方式的FindControl(图三)                        Return oFindControl
27Asp.net—递归方式的FindControl(图三)                    End If
28Asp.net—递归方式的FindControl(图三)                End If
29Asp.net—递归方式的FindControl(图三)            End If
30Asp.net—递归方式的FindControl(图三)        Next
31Asp.net—递归方式的FindControl(图三)        Return Nothing
32Asp.net—递归方式的FindControl(图四)    End Function
33Asp.net—递归方式的FindControl(图五)
34Asp.net—递归方式的FindControl(图一)Asp.net—递归方式的FindControl(图二)    /**/''' <summary>
35Asp.net—递归方式的FindControl(图三)    ''' 取得对象的属性值。
36Asp.net—递归方式的FindControl(图三)    ''' </summary>
37Asp.net—递归方式的FindControl(图三)    ''' <param name="Component">具有要撷取属性的对象。</param>
38Asp.net—递归方式的FindControl(图四)    ''' <param name="PropertyName">属性名称。</param>
39Asp.net—递归方式的FindControl(图一)Asp.net—递归方式的FindControl(图二)    Public Shared Function GetPropertyValue()Function GetPropertyValue(ByVal Component As Object, ByVal PropertyName As String) As Object
40Asp.net—递归方式的FindControl(图三)        Dim Prop As PropertyDescriptor = TypeDescriptor.GetProperties(Component).Item(PropertyName)
41Asp.net—递归方式的FindControl(图三)        Return Prop.GetValue(Component)
42Asp.net—递归方式的FindControl(图四)    End Function

例如我们要寻找 FormView 控件中一个 CommandName="Insert" 的 LinkButton(ID="FormView1") 控件,则可以如下呼叫 FindControlEx 方法。

Asp.net—递归方式的FindControl(图五)        Dim oLinkButton As LinkButton
Asp.net—递归方式的FindControl(图五)        oLinkButton = CType(FindControlEx(FormView1, GetType(LinkButton), "CommandName", "Insert"), LinkButton)

如果你要寻找的按钮有可能为 Button、LinkButton、ImageButton任一型别的按钮,因为这些按钮都有实作 System.Web.UI.WebControls.IButtonControl 接口,所以也可以利用 IButtonControl 接口去寻找更有弹性。

Asp.net—递归方式的FindControl(图五)        Dim oButtonControl As IButtonControl
Asp.net—递归方式的FindControl(图五)        oButtonControl = CType(FindControlEx(FormView1, GetType(IButtonControl), "CommandName", "Insert"), IButtonControl)
更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册ASP.NET教程专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章