2017-07-26 161 views
1

在我的應用程序中,我使用代碼dgvCases.ClearSelection()取消選擇所有行。現在看起來沒有選擇,但實際上第一行被選中。這裏是我的代碼從選定行的「id」列中獲取值。DataGridView.ClearSelection()不按預期方式工作

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

默認情況下你的'caseid'是0?因此,如果用戶點擊數據網格,因此可以使用'if else statement'和'caseid'來代替'try catch',所以添加一個像cellclick這樣的事件,那麼如果用戶點擊你的'datagrid',則賦值到你的'caseid'我認爲它會解決你的問題 – Muj

回答

2

從MSDN文檔上DataGridView.ClearSelection,重點煤礦:

通過取消選擇所有選擇細胞清除當前的選擇。

」現在幾乎沒有任何東西被選中「因爲沒有選定任何東西。您正在使用CurrentRow.Index大概從選定的行中獲取值。但是CurrentRowCurrentCell不等於行/單元格爲Selected。這是一個common misconception

從上述聯答覆的註釋部分:

CurrentCell返回「激活」細胞,其是從「已選擇」不同。即使選擇了多行,活動單元也可能在其他地方,並且只能有一個活動單元 - Luke Marlin

而且,即使您取消選擇數據網格視圖中的所有內容,其中一個細胞仍然是活躍的,所以你不能依靠這個爲空或類似的東西,因爲沒有選擇行。 - 丹尼爾·格雷

最好的辦法是用

caseId = dgvCases.Item("Id", dgvCases.SelectedRows(0).Index).Value 

更換

caseId = dgvCases.Item("Id", dgvCases.CurrentRow.Index).Value 

清除您的選擇後,這將觸發catch塊。附註:Use if/else instead of try/catch來驗證是否有任何選定的行。