“如何遍历ASP.NET页面所有的控件呢?“,这是在社区发问的问题中最普遍的问题之一。通常我们对这个问题的回答为:”使用Page类的controls 属性来实现”!这个controls 属性可以使我们获取一个控件的所有子控件,但是如果其中的一个子控件同样拥有自己的子控件,仅仅使用这个属性便很难获取ASP.NET页面所有的控件。所以,要根本解决这个问题,我们需要书写一些额外的方法以获取页面中的所有控件。
假设页面中有若干个TextBox ,我们想遍历整个页面,然后获取所有TextBox的name和value ,并将它们显示在DataGrid中。
在我们开始遍历页面之前,需要建立一个类,用于存放那些TextBox的name和value ,代码如下:
Public Class UtilityObj Private _name As String Private _value As String Public Sub New(ByVal Name As String, ByVal Value As String) _name = Name _value = Value End Sub Public Property Name() As String Get Return _name End Get Set(ByVal Value As String) _name = Name End Set End Property Public Property Value() As String Get Return (_value) End Get Set(ByVal Value As String) _value = Value End Set End Property End Class |
这个类包含两个属性:"name" 和 "value",再定义一个公有的Arraylist(oArraylist),用于存储数据。如图:
要实现遍历ASP.NET页面所有的控件,我们还需要定义一个主要的方法。这个方法接收一个Control类型的参数,如果这个参数为textbox,则存储它的 name 和 value。
代码如下:
Public Sub LoopingControls(ByVal oControl As Control) Dim frmCtrl As Control oArrayList = New ArrayList For Each frmCtrl In oControl.Controls If TypeOf frmCtrl Is TextBox Then oArrayList.Add(New UtilityObj(frmCtrl.ID, DirectCast(frmCtrl, TextBox).Text)) End If If frmCtrl.HasControls Then LoopingControls(frmCtrl) End If Next End Sub |
LoopingControls(Page)
DataGrid1.DataSource = oArrayList
DataGrid1.DataBind()
本文地址:http://com.8s8s.com/it/it44468.htm