2017-01-18 15 views
0

私は、タッチスクリーン上のタップだけでデータグリッドビューで複数行の選択/選択解除が必要な新しいプロジェクトを作成します。DataGridviewで複数選択

形式は次のようになります。exempleについては

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

FullRowSelectTrueSelectionModeMultiSelectプロパティを設定した後、あなたが選択されているあなたのDataGridViewのどの行格納するのにListを使用することができます。それはListに含まれてRowsRemovedにあなたがListをクリアする必要があります場合は、行を選択することができますCellClickあなたが/追加することができますRowPostPaintに、あなたの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

ちょっとテストしましたが、問題が発生しました。この方法で行った選択をクリアしたい場合は、すでに選択されているすべての行でリクライクすることを除いてどのように進めることができますか?私は明確な選択を試みたが成功しなかった。 – Boushard

+0

答えが更新されました! – tezzo