如何在运行时在数据网格中获取特定控件?

时间:2015-06-11 16:42:39

标签: asp.net vb.net

我有一个DataGrid,其中ItemTemplate只是<asp:RadioButton>。附件是CheckedChanged事件。

CheckedChanged事件中进行调试时,我正在查看UniqueID的{​​{1}}属性。无论我点击哪个网格行,我总是得到这个值sender

我在我的解决方案中打开了动态aspx文件,以查看网格的实际内容,并且所有单选按钮都是唯一编号的,因为我期待;

第一行:

dgCodes$ctl12$rbSelectid="dgCodes_ctl04_rbSelect"

第二行:

name="dgCodes$ctl04$rbSelect"id="dgICDCodes_ctl05_rbSelect"

同样,无论我在后面的代码中选择哪一行的单选按钮,我总是得到ctl12(即使网格中没有12行):

name="dgICDCodes$ctl05$rbSelect"

操纵Protected Sub rbSelect_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Dim rb As RadioButton = DirectCast(sender, RadioButton) Dim uid As String = rb.UniqueID.Replace("$", "_") Dim rbSender As RadioButton = DirectCast(dgICDCodes.FindControl(uid), RadioButton) ' do stuff with rbSender End Sub 并不像我需要的那样行事,希望这能让我做我需要做的事。

1 个答案:

答案 0 :(得分:0)

我想出了最具贫民窟,不可扩展的解决方案。它有效,但它远非好。

向网格添加了ItemDataBound事件,该事件查找有问题的特定控件并强制其在那里检查状态。

Protected Sub dgICDCodes_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgICDCodes.ItemDataBound

    Dim rb As RadioButton = e.Item.FindControl("rbSelect")

    If rb IsNot Nothing And Not String.IsNullOrEmpty(mStrCode) Then
        If rb.Text = mStrCode Then
            rb.Checked = True
        End If
    End If
End Sub

网格中的行越多,运行速度越慢。在网格中有70K记录,它可能会挂起2或3秒钟 - 但这并没有使用任何搜索参数来填充网格。

所以,它再次起作用,但不是很好。

相关问题