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

时间:2010-12-18 01:49:33

标签: 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.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 个答案:

答案 0 :(得分:10)

使用FormView,您必须使用find控件,如:

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

您无法直接通过ID引用控件。

HTH。

答案 1 :(得分:3)

在VB中,您需要使用Directcast

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

答案 2 :(得分: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。上面显示的按钮命令是一个示例,因此您可能希望使用其他控件。