您可以通过遍历行找到选中的复选框。
Protected Sub MyCheckBoxCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
For Each row As GridViewRow In GridView1.Rows
Dim cb As CheckBox = DirectCast(row.FindControl("MyCheckBoxID"), CheckBox)
If sender Is cb AndAlso cb.Checked Then
'Do something ...'
Exit For
End If
Next
End Sub
这并不像看起来那么低效(当 Grid 的 PageSize 不太高时)。
您还可以通过 Checkbox.Parent.Parent 获取 GridViewRow:
Protected Sub MyCheckBoxCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim cb As CheckBox = DirectCast(sender, CheckBox)
Dim row As GridViewRow = DirectCast(cb.Parent.Parent, GridViewRow)
row.BackColor = DirectCast(IIf(cb.Checked, Color.Red, Color.White), Color)
End Sub
这比选项 1 更快,但如果您将来将复选框嵌套在表格中,那么如果不进行调整,这将不再起作用。
我通常更喜欢选项 1,因为在事件处理程序中,或多或少一毫秒并不重要。
更新:通过NamingContainer获取 GridViewRow是另一个(在我看来是最好的)选项:
Dim row As GridViewRow = DirectCast(cb.NamingContainer, GridViewRow)
当您将复选框嵌套在其他控件(如表格)中时,这甚至仍然有效。