Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET、VB:如何从后台代码访问FormView中的控件?_Asp.net_Vb.net_Controls_Code Behind_Formview - Fatal编程技术网

ASP.NET、VB:如何从后台代码访问FormView中的控件?

ASP.NET、VB:如何从后台代码访问FormView中的控件?,asp.net,vb.net,controls,code-behind,formview,Asp.net,Vb.net,Controls,Code Behind,Formview,我在FormView控件中有一个复选框和一个面板,我需要从后面的代码中访问它们,以便使用复选框确定面板是否可见。这是我最初使用的代码,但由于我将控件放在FormView中,它不再工作 Protected Sub checkGenEd_CheckedChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) If checkGenEd.Chec

我在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
它还说checkened和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

不再有任何错误,但单击复选框时不会发生任何错误。我认为需要某种类型的事件来触发它,但我不知道如何将事件处理程序放入事件处理程序中。

对于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> 

回到服务器后,您可以开始查看各种控件以查看它们所包含的内容,必要时使用findControl。上面显示的按钮命令是一个示例,因此您可能需要使用另一个控件。

好的,这是有意义的,但现在它告诉我“CheckBox”是一种类型,不能用作表达式。我认为这通常是一个语法错误,您可以发布您的内容吗?您也可以尝试上面的替代语法…Dim checkGenEd As CheckBox=CType(FormView1.FindControl(“checkGenEd”),用于vb等效的强制转换。您发布了与问题相同的内容
<asp:linkbutton id="UpdateButton"
    text="Update"
    commandname="Update"
    runat="server"/>
Private Sub FormView1_ItemCommand(sender As Object, e As System.Web.UI.WebControls.FormViewCommandEventArgs) Handles FormView1.ItemCommand
    'your code here
End Sub