2017-01-18 161 views
0

我在一個新項目上工作,該項目需要用戶在datagridview中多行選擇/取消選擇,只需在觸摸屏上輕敲一下。datagridview中的多項選擇

的形式應該是這樣的:

Form Screenshot http://117.imagebam.com/download/PBhJJNednkL1q0JzMF8j_g/52716/527152884/test%20lecture%20scanner.PNG

對於爲例,如果用戶想要刪除的行2和5,他只需要在每一行一次點擊選擇/取消選擇它們。選擇完成後,他點擊「刪除行」按鈕。

我已經嘗試玩沒有成功的CellClick事件!

有人可以有線索我該如何處理這個問題?

+2

這通常是電網的正常行爲的功能,並通過按住Ctrl鍵,你左鍵單擊列標題來完成。網格屬性可能會控制選擇類型。 – DonBoitnott

+0

由於操作員沒有鍵盤,我想要一個「模擬」CTRL鍵的功能! – Boushard

回答

1

MultiSelect屬性設置爲TrueSelectionModeFullRowSelect後,您可以使用List存儲選擇,你的DataGridView排。

CellClick您可以添加/從你的List刪除行,上RowPostPaint您可以選擇一行,如果它包含在ListRowsRemoved你要清楚的List

Private intSelectedRows As New List(Of Integer) 

Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick 

    With CType(sender, DataGridView) 

     Dim intRow As Integer = .CurrentRow.Index 

     If Not Me.intSelectedRows.Contains(intRow) Then 
      Me.intSelectedRows.Add(intRow) 
     Else 
      .CurrentRow.Selected = False 
      Me.intSelectedRows.Remove(intRow) 
     End If 

    End With 

End Sub 

Private Sub DataGridView1_RowPostPaint(sender As Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint 

    If Me.intSelectedRows.Contains(e.RowIndex) Then 
     CType(sender, DataGridView).Rows(e.RowIndex).Selected = True 
    End If 

End Sub 

Private Sub DataGridView1_RowsRemoved(sender As Object, e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles DataGridView1.RowsRemoved 

    Me.intSelectedRows.Clear() 

End Sub 

如果你想明確的選擇,你可以使用此代碼:

Private Sub btnClearSelectedRows_Click(sender As System.Object, e As System.EventArgs) Handles btnClearSelectedRows.Click 

    For Each intSelectedRow As Integer In Me.intSelectedRows 
     Me.DataGridView1.Rows(intSelectedRow).Selected = False 
    Next intSelectedRow 

    Me.intSelectedRows.Clear() 

End Sub 
+0

像魅力一樣工作!正是我在尋找的! 非常感謝你@tezzo – Boushard

+0

剛剛測試了一點,但我遇到了一個問題。如果我想清除此方法所做的選擇,除了重新點擊已選擇的所有行外,我該如何繼續?我試過clearselection但沒有成功。 – Boushard

+0

答案更新了! – tezzo