ASP.NET, VB:как получить доступ к элементам управления внутри FormView из кода?

у меня есть флажок и панель внутри элемента управления FormView, и мне нужно получить к ним доступ из кода позади, чтобы использовать флажок, чтобы определить, видна ли панель. Это код, который я первоначально использовал, но поскольку я поместил элементы управления внутри FormView, он больше не работает.

Protected Sub checkGenEd_CheckedChanged(ByVal sender As Object, _
                                         ByVal e As System.EventArgs)
    If checkGenEd.Checked = True Then
        panelOutcome.Visible = True
    Else
        panelOutcome.Visible = False
    End If
End Sub 

Я начал понимать это на основе других вопросов, которые я посмотрел здесь, но все они были на C# вместо VB, так что это насколько я got:

Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
    If FormView1.CurrentMode = FormViewMode.Edit Then

    End If
End Sub

так что да, я не уверен, как именно закончить его. Извините, это может быть довольно просто, но я новичок в этом, и любая помощь будет оценена!

EDIT: вот мой код сейчас:

Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
    If FormView1.CurrentMode = FormViewMode.Edit Then

        CheckBox checkGenEd = formview1.FindControl("checkGenEd");
        Panel panelOutcome = formview1.FindControl("panelOutcome");

    End If
End Sub

Он также говорит, что checkGenEd и panelOutcome не объявлены.

EDIT: я изменил свой код на это, но он все еще не работает:

Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
    If FormView1.CurrentMode = FormViewMode.Edit Then

        Dim checkGenEd As CheckBox = FormView1.FindControl("checkGenEd")
        Dim panelOutcome As Panel = FormView1.FindControl("panelOutcome")

        If checkGenEd.Checked = True Then
            panelOutcome.Visible = True
        Else
            panelOutcome.Visible = False
        End If

    End If
End Sub

больше нет ошибок, но ничего не происходит, когда я нажимаю флажок. Я думаю, должно быть какое-то событие, чтобы вызвать его, но я не знаю, как вы можете поместить обработчик событий внутри обработчика событий.

3 ответов


С FormView вы должны использовать элемент управления find, как в:

CheckBox checkGenEd = (CheckBox)formview1.FindControl("checkGenEd");
Panel panelOutcome = (Panel)formview1.FindControl("panelOutcome");

вы не можете ссылаться на элемент управления непосредственно по ID.

HTH.


в VB вам нужно использовать Directcast

Dim chk As Checkbox = DirectCast(Me.FormView1.FindControl("checkgen"), Checkbox)

FormView имеет свою собственную структуру событий. Обычный элемент управления в FormView не будет генерировать события обратной передачи, которые вы ищете. Сначала я сделал ту же ошибку. Я хотел, как и вы, создать какую-то обратную связь, которую можно было бы перехватить на сервере. Как только мы вернемся на сервер мы можем посмотреть значения в чекбоксы и т. д. В зависимости от того, что бизнес-правила. Вот что я сделал.

прежде всего поместите все соответствующие элементы управления в Ан

<EditItemTemplate> 

раздел в FormView. (Есть другие теги шаблонов, которые могут быть более подходящими). Для генерации обратной передачи есть кнопка (например), подобная приведенной ниже. (Это должно быть также в разделе EditItemTemplate):

<asp:linkbutton id="UpdateButton"
    text="Update"
    commandname="Update"
    runat="server"/>

вы можете перехватить это на сервере с помощью Formview event ItemCommand. Например:

Private Sub FormView1_ItemCommand(sender As Object, e As System.Web.UI.WebControls.FormViewCommandEventArgs) Handles FormView1.ItemCommand
    'your code here
End Sub

как только вы вернетесь на сервер, вы можете начать смотреть на различные элементы управления, чтобы увидеть, что они провести, используя findControl, если это необходимо. Команда button, показанная выше, является примером, поэтому вы можете использовать другой элемент управления.