asp.net/VB.net: FindControl, а не по идентификатору ControlType - PullRequest
1 голос
/ 17 февраля 2012

мне нужно найти элемент управления в репитере в моем приложении asp.net.

В данный момент я использую FindControl("IdOfControl"), и это работает хорошо.

Но мне нужно найти элемент управления по его типу (ImageButton).

Мой текущий код:

For Each rptItem As RepeaterItem In myRepeater.Items
    Dim imgBtn As ImageButton = TryCast(rptItem.FindControl("myImageBtn"), ImageButton)
    AddHandler imgBtn.Click, AddressOf imgBtn_Click
Next

Я ищу что-то подобное:

For Each rptItem As RepeaterItem In myRepeater.Items
    Dim imgBtn As ImageButton = TryCast(rptItem.FindControl(TypeOf ImageButton), ImageButton)
    AddHandler imgBtn.Click, AddressOf imgBtn_Click
Next

Кто-нибудь может помочь?

Ответы [ 4 ]

4 голосов
/ 17 февраля 2012

Попробуйте это

ваше требование

For Each ri As RepeaterItem In myRepeater.Items
    For Each cn As Control In ri.Controls
        If cn.[GetType]() = GetType(ImageButton) Then
            Response.Write("ss")
            Response.Write(vbLf)
        End If
    Next
Next

e.g
    For Each cn As Control In form1.Controls
        If cn.[GetType]() = GetType(ImageButton) Then
            Response.Write("ss")
        End If
    Next
0 голосов
/ 05 марта 2015
    For Each cn As Control In Me.Controls
        If (cn.[GetType]().Equals(GetType(Button))) Then
            Dim str1 As String = cn.Text
            ds = fobj.getrecord("select shopid from tbstallbooking where shopid='" + str1 + "'")
            n = ds.Tables(0).Rows.Count
            If (n > 0) Then
                cn.BackColor = Color.Red
                cn.Enabled = False
                ds.Clear()
            Else
                cn.BackColor = Color.Green
                cn.Enabled = True
            End If
        End If
    Next
0 голосов
/ 17 февраля 2012

Санджай Госвами опубликовал хорошее решение для работы.

Я должен был изменить

If cn.[GetType]() = GetType(ImageButton) Then

до

If cn.GetType().Equals(GetType(ImageButton)) Then

и добавь мои вещи.

Полный рабочий код:

For Each rptItem As RepeaterItem In myRepeater.Items
     For Each cn As Control In rptItem.Controls
            If cn.GetType().Equals(GetType(ImageButton)) Then
                AddHandler (TryCast(rptItem.FindControl(cn.ID), ImageButton)).Click, AddressOf imgBtn_Click
            End If
     Next
Next
0 голосов
/ 17 февраля 2012

Я не уверен, что ваш ретранслятор будет иметь вложенные элементы управления, которые содержат кнопки ImageButton.Итак, что-то вроде следующего рекурсивного кода:

Public Function FindControl(ByVal ParentControl As Control) As Control
        Dim ReturnedControl As New Control
        For Each CurrentControl As Control In ParentControl.Controls
            CurrentControl.[GetType]() = GetType(ImageButton) Then
                ReturnedControl = CurrentControl
                Exit For
            End If
            If (CurrentControl.HasControls) Then
                ReturnedControl = FindControl(CurrentControl)
            End If
        Next
        Return ReturnedControl
    End Function

Вышеприведенная функция найдет первый элемент ImageButton в элементе управления Repeater, который вы передали в качестве параметра.Надеюсь это поможет.

...