Добавить элементы управления в коллекцию и обновить из коллекции - PullRequest
0 голосов
/ 26 марта 2011

У меня есть приложение ASP.NET с множеством текстовых полей по всей странице, которые нуждаются в обновлении в различных точках во время выполнения программы.

Эти текстовые поля на самом деле принадлежат к определенному классу, поэтому для легкого обновления я подумал, что мог бы создать словарь (из строки, объекта) и добавить к нему control.ID и control, а затем для обновления сделатьчто-то вроде этого:

(в случае обновления 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 ]

1 голос
/ 26 марта 2011

Если вам нужно использовать словарь, попробуйте это:

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
1 голос
/ 26 марта 2011

Ваша функция должна вызывать элемент управления напрямую, а не коллекцию 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.")
0 голосов
/ 26 марта 2011

У меня есть проект, который использует 100 кнопок, и они используют один обработчик событий. Если бы вы могли создать все текстовые поля в массиве, вы могли бы определить общий обработчик событий. Следующий фрагмент будет использоваться в качестве ссылки. Надеюсь, код 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
...