DataGridView.ClearSelection()无法按预期工作

时间:2017-07-26 11:52:57

标签: vb.net datagridview

在我的应用程序中,我使用代码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”,这是不想要的。出了什么问题,我怎么能从第一行开始清理选择。

1 个答案:

答案 0 :(得分:3)

来自DataGridView.ClearSelection上的MSDN文档,强调我的:

  

通过取消选择所有所选单元格来清除当前选择。

" 现在看不到任何内容"因为没有选择任何东西。您正在使用CurrentRow.Index来推测从所选行中获取值。但CurrentRowCurrentCell并不等同于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验证是否有任何选定的行。