ASP.NET, VB: как получить доступ к элементам управления внутри FormView из кода позади? - PullRequest
8 голосов
/ 18 декабря 2010

У меня есть флажок и панель внутри элемента управления 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, так что я понял:

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

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

РЕДАКТИРОВАТЬ: вот мой код сейчас:

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 не объявлены.

РЕДАКТИРОВАТЬ: я изменил свой код на это, но он все еще не работает:

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 ]

10 голосов
/ 18 декабря 2010

С FormView, вы должны использовать поиск, как в:

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

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

НТН.

3 голосов
/ 20 августа 2011

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

Dim chk As Checkbox = DirectCast(Me.FormView1.FindControl("checkgen"), Checkbox)
2 голосов
/ 06 октября 2012

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

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

<EditItemTemplate> 

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

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

Вы можете перехватить это на сервере с помощью события FormView 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, показанная выше, является примером, поэтому вы можете использовать другой элемент управления.

...