将控件添加到集合并从集合更新

时间:2011-03-25 23:54:02

标签: asp.net vb.net collections web-controls

我有一个ASP.NET应用程序,页面上有很多文本框,需要通过程序执行在各个点进行更新。

这些文本框实际上属于某个类,所以为了便于更新,我想我可以创建一个Dictionary(Of string,object)并将control.IDcontrol添加到它,然后进行更新做这样的事情:

(如果更新textbox.text):

for each kv as KeyValuePair(Of string, object) in mytextboxes
      if (kv.Key.Contains("textboxid")) then
             DirectCast(kv.Value, TextBox).Text = mystring
      end if
next

但是文本框的text属性实际上并没有更新。我主要是为了避免在每次更新文件框时为每个文本框手动执行textbox.text = somestring

这是一个可行的解决方案吗? 如果是这样,我做错了什么?

3 个答案:

答案 0 :(得分:1)

您的函数需要直接转换控件,而不是KeyValuePair集合。尝试这样的事情......

Private Sub SetTextboxText(ByVal strTextBoxID As String, ByVal strText As String)

    Dim txtChangeThisOne As TextBox = CType(Page.FindControl(strTextBoxID), TextBox)

    If Not txtChangeThisOne Is Nothing Then

        txtChangeThisOne.Text = strText

    End If

End Sub

然后打电话给...

SetTextboxText("TextboxID", "Text you wish to set.")

答案 1 :(得分:1)

如果您必须使用字典,请尝试以下方法:

Dim mytextboxes As New Dictionary(Of String, TextBox)
Dim mystring As String = "A Input String."
Dim myTextBoxName As String = "TextBox1"
Dim t As TextBox
For Each c As Object In Me.Controls
    If (TypeOf c Is TextBox) Then
        t = CType(c, TextBox)
        mytextboxes.Add(t.Name, t)
    End If
Next

Try
    mytextboxes(myTextBoxName).Text = mystring
Catch ex As Exception
    MsgBox("There is no " & myTextBoxName)
End Try

答案 2 :(得分:0)

我有一个使用100个按钮的项目,它们共享一个事件处理程序。如果可以在Array中创建所有TextBox,则可以定义公共事件处理程序。以下snippit将用作参考。希望VB代码仍然有用。 如果你想测试代码,你需要一个10 X 10的表格和布局。让我知道它是否有帮助。

Public Class Form1
    Private NRow As Integer = 10
    Private NCol As Integer = 10
    Private BtnArray(NRow * NCol - 1) As Button
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TableLayoutPanel1.Size = Me.ClientSize
        For i As Integer = 0 To BtnArray.Length - 1
            BtnArray(i) = New Button()
            BtnArray(i).Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
            BtnArray(i).Text = CStr(i)
            TableLayoutPanel1.Controls.Add(BtnArray(i), i Mod NCol, i \ NCol)
            AddHandler BtnArray(i).Click, AddressOf ClickHandler
        Next
    End Sub
    Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)
        MsgBox("I am button #" & CType(sender, Button).Text)
    End Sub
End Class