我在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
我没有任何错误,但单击复选框后没有任何反应。我认为需要某种事件来触发它,但我不知道如何将事件处理程序放在事件处理程序中。
答案 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。上面显示的按钮命令是一个示例,因此您可能希望使用其他控件。