在我的应用程序中,我使用代码dgvCases.ClearSelection()
取消选择所有行。现在看不到任何东西,但实际上选择了第一行。这是我从所选行的“id”列获取值的代码。
Try
caseId = dgvCases.Item("Id", dgvCases.CurrentRow.Index).Value
MsgBox(caseId)
Catch ex As Exception
MsgBox("Please select a row", MsgBoxStyle.Information)
End Try
它从第一行得到“id”,这是不想要的。出了什么问题,我怎么能从第一行开始清理选择。
答案 0 :(得分:3)
来自DataGridView.ClearSelection
上的MSDN文档,强调我的:
通过取消选择所有所选单元格来清除当前选择。
" 现在看不到任何内容"因为没有选择任何东西。您正在使用CurrentRow.Index
来推测从所选行中获取值。但CurrentRow
和CurrentCell
并不等同于Selected
行/单元格。这是common misconception。
从以上链接答案的评论部分:
CurrentCell
返回"有效"细胞,不同于"选择"。即使选择了多行,活动单元也可能位于其他位置,并且只能有一个活动单元 - Luke Marlin而且,即使您取消选择数据网格视图中的所有内容,其中一个单元格仍然处于活动状态,因此您不能依赖此为null或类似的东西,因为没有选择任何行。 - 丹尼尔格雷
您最好的选择是替换
caseId = dgvCases.Item("Id", dgvCases.CurrentRow.Index).Value
与
caseId = dgvCases.Item("Id", dgvCases.SelectedRows(0).Index).Value
清除选择后,这将触发您的catch块。附注:Use if/else instead of try/catch验证是否有任何选定的行。