我有一个DataGrid
,其中ItemTemplate
只是<asp:RadioButton>
。附件是CheckedChanged
事件。
在CheckedChanged
事件中进行调试时,我正在查看UniqueID
的{{1}}属性。无论我点击哪个网格行,我总是得到这个值sender
。
我在我的解决方案中打开了动态aspx文件,以查看网格的实际内容,并且所有单选按钮都是唯一编号的,因为我期待;
第一行:
dgCodes$ctl12$rbSelect
,id="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
并不像我需要的那样行事,希望这能让我做我需要做的事。
答案 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秒钟 - 但这并没有使用任何搜索参数来填充网格。
所以,它再次起作用,但不是很好。