VB。 NET ASPX:找到控件触发器并动态调用它

时间:2012-09-21 16:32:17

标签: asp.net vb.net visual-studio-2010

我正在寻找一种方法,即知道控件名称,提升它们或调用进程事件/代码。 我在VS2010中使用VB .NET

我有一个aspx页面,其中包含一个面板中的复选框,每个复选框都有自己的触发器。我有代码保存已选中复选框的列表。我有代码将已检查状态恢复到这些复选框,但我需要执行相关代码到复选框checkchanged事件。

' Read db to get saved list of checkboxes '
For each result from db
    Dim cb As CheckBox
    cb = 'a function that finds and returns the control'
    ' Now that I have the control, 
    ' how can I find and execute it's checkedchanged code?

控制返回功能正常工作,因为在测试中,我可以处理cb.checked = true,并且cb会被检查,但这不会引发事件/触发代码。

相关的checkedchanged subs的例子:

Protected Sub cb_use_rc3_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cb_use_rc3.CheckedChanged
Protected Sub cb_use_casestatus_CheckedChanged(sender As Object, e As EventArgs) Handles cb_use_casestatus.CheckedChanged

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

For Each grd_Row As GridViewRow In gvPersonalInventario.Rows
  Dim cb As New Web.UI.WebControls.CheckBox
  cb = grd_Row.FindControl("CheckBox2")
  If cb.Checked = True Then
    label1.text = grd_Row.Cells(0).Text
  End If
Next

答案 1 :(得分:0)

好的,我正在假设您的复选框每个都有一个单独的ID,并且不是由任何类型的绑定控件生成的。

虽然可以确定哪个处理程序连接到什么对象(或者我理解的对象),但对于这个有限的情况来说,它可能比它的价值更麻烦。

最简单但最丑陋的方法是:

  1. 遵循Schmelter先生的建议,并以有意义的方法隔离业务逻辑。从每个事件处理程序中调用它们,而不是将所有逻辑放在事件处理程序中。
  2. 由于您拥有控件,因此您可以确定其ID。使用带有控件ID的Select Case语句来确定#1中要调用的方法。