2010-12-18 3 views
7

У меня есть флажок и панель внутри элемента управления FormView, и мне нужно получить к ним доступ из кода, чтобы использовать этот флажок, чтобы определить, видима ли панель. Это код, который я изначально использовал, но так как я помещал элементы управления внутри FormView, он больше не работает.ASP.NET, VB: как получить доступ к элементам управления внутри 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 

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

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 

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

ответ

10

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

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

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

HTH.

+0

Хорошо, что имеет смысл, но теперь это говорит мне, что «CheckBox» является типом и не может использоваться как выражение. – Sara

+0

Я думаю, что это типичная ошибка синтаксиса, можете ли вы опубликовать то, что у вас есть? Вы также можете попробовать альтернативный синтаксис выше ... –

+2

Dim checkGenEd В качестве CheckBox = CType (FormView1.FindControl ("checkGenEd"), CheckBox) для эквивалентной кавычки vb. – Tom

2

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

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

Вы отправили то же самое, что и вопрос http://stackoverflow.com/questions/7128764/handles-a-control-in-a-formview-in-asp-net –

2

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

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

<EditItemTemplate> 

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

Смежные вопросы