行を繰り返すことで、チェックされたチェックボックスを見つけることができます。
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
これは見た目ほど非効率的ではありません(グリッドの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を好みます。これは、イベントハンドラーでは、1ミリ秒程度は問題ではないためです。
更新: NamingContainerを介してGridViewRowを取得することは別の(私の意見では最良の)オプションです:
Dim row As GridViewRow = DirectCast(cb.NamingContainer, GridViewRow)
これは、テーブルなどの他のコントロール内にチェックボックスをネストする場合でも機能します。