2010-12-18 11 views
7

Ich habe eine Checkbox und ein Panel innerhalb eines FormView-Steuerelements, und ich muss auf sie aus dem Code dahinter zugreifen, um das Kontrollkästchen zu verwenden, um zu bestimmen, ob das Panel sichtbar ist oder nicht. Dies ist der Code, den ich ursprünglich verwendet habe, aber seit ich die Steuerelemente in FormView platziert habe, funktioniert es nicht mehr.ASP.NET, VB: wie auf Steuerelemente in einem FormView aus dem Code zugreifen?

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 

Ich habe angefangen, diese, um herauszufinden, basierend auf andere Fragen, die ich sah hier, aber alle von ihnen waren in C# statt VB, so ist dies so weit wie ich bekam:

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 

Also ja, ich weiß nicht genau, wie ich es beenden soll. Es tut mir leid, das könnte ziemlich einfach sein, aber ich bin neu dabei und jede Hilfe wäre willkommen!

EDIT: Hier ist mein Code jetzt:

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 

Es sagt auch, dass checkGenEd und panelOutcome nicht erklärt.

EDIT: Ich änderte meinen Code zu diesem, aber es funktioniert immer noch nicht:

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 

Es gibt keine Fehler mehr, aber es passiert nichts, wenn ich auf das Kontrollkästchen klicken. Ich denke, dass es irgendeine Art von Ereignis geben muss, um es auszulösen, aber ich weiß nicht, wie Sie einen Event-Handler in einen Event-Handler einfügen können.

Antwort

10

Mit Formview, müssen Sie finden Steuerung verwenden, wie:

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

Sie keine Kontrolle direkt von ID verweisen können.

HTH.

+0

Okay, das macht Sinn, aber jetzt sagt es mir, dass "CheckBox" ein Typ ist und nicht als Ausdruck verwendet werden kann. – Sara

+0

Ich denke, das ist in der Regel ein Syntaxfehler, können Sie das, was Sie haben, posten? Sie könnten auch die alternative Syntax oben versuchen ... –

+2

Dim checkGenEd As CheckBox = CType (FormView1.FindControl ("checkGenEd"), CheckBox) für das vb-äquivalente Casting. – Tom

2

In VB müssen Sie Directcast

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

Sie haben dieselbe Frage wie http://stackoverflow.com/questions/7128764/handles-a-control-in-a-formview-in-asp-net veröffentlicht –

2

Formview verfügt über eine eigene Veranstaltungsrahmen verwenden. Ein normales Steuerelement in einem FormView wird die Postback-Ereignisse, nach denen Sie suchen, nicht generieren. Ich habe den gleichen Fehler gemacht. Ich wollte, wie Sie, eine Art Postback generieren, das am Serverende abgefangen werden kann. Sobald wir zum Server zurückgekehrt sind, können wir die Werte in Checkboxen usw. betrachten, abhängig davon, welche Geschäftsregeln gelten. Das habe ich getan.

Zunächst einmal stellen alle relevanten Kontrollen innerhalb eines

<EditItemTemplate> 

Abschnitt innerhalb des Formview. (Es gibt andere Vorlagen-Tags, die möglicherweise besser geeignet sind). Um das Postback zu erzeugen, haben Sie eine Schaltfläche (zum Beispiel) wie die folgende. (Dies hat im EditItemTemplate Abschnitt sein, wie gut):

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

Sie dies mit dem Formview-Ereignisse ItemCommand am Server abgefangen. Zum Beispiel:

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

Sobald Sie auf dem Server sind wieder da können Sie dann an den verschiedenen Kontrollen der Suche beginnen, um zu sehen, was sie halten, mit Findcontrol, wenn nötig. Der oben abgebildete Schaltflächenbefehl ist ein Beispiel, weshalb Sie möglicherweise ein anderes Steuerelement verwenden möchten.