投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/7/31 15:01:00
> 現在選択している行を削除させるようにしたいのですが、選択行を取得する方法がわかりません。

行全体を選択していれば、そのまま Delete キーを押すことで
該当行が削除状態にマークされますが、それでは駄目でしょうか。


削除マークの付いた行(RowState プロパティが Deleted な行)というものは、
バインドしている DataGridView 上では表示されなくなりますし、
その DataTable を MySqlDataAdapter に渡せば、削除マークの付いた行に対する
DELETE SQL が自動的に呼び出せれ、実際にデータベース上からも削除されます。


DataGridView で「行全体を選択」するには:
 SelectionMode プロパティを FullRowSelect にしておき
 任意のセルをマウスもしくはキーボード操作で選択する
もしくは:
 SelectionMode プロパティを RowHeaderSelect にしておき
 RowHeaderVisible = True にした状態で、
 左端の ► のセルを選択する
もしくは:
 SelectionMode プロパティを RowHeaderSelect にしておき
 [Shift]+[Space] を押下する
のいずれかの操作で行います。

Ctrl キーと併用すれば、複数の行を同時に選択することもできます。


またユーザー操作ではなく、プログラムから削除マークを付けたいのであれば、
前回の回答のように、選択行に対して個別に Delete メソッドを呼び出していく必要があります。


【行全体が選択されているものを対象とする場合】
DataGridView1.EndEdit()
For Each gridRow As DataGridViewRow In DataGridView1.SelectedRows
    If Not gridRow.IsNewRow Then   'IsNewRow 判定するかは御好みで 
        DirectCast(gridRow.DataBoundItem, DataRowView).Delete()
    End If
Next



【セルの選択状態とは関係なく、現在のカーソル行を対象とする場合】
Dim bnd = Me.BindingContext(Me.DataGridView1.DataSource, Me.DataGridView1.DataMember)
Dim rowView = DirectCast(bnd.Current, DataRowView)
If rowView IsNot Nothing Then
    rowView.Delete()
End If
もしくは
Dim gridRow = DataGridView1.CurrentRow
If gridRow IsNot Nothing Then
  Dim rowView = TryCast(gridRow.DataBoundItem, DataRowView)
  If rowView IsNot Nothing Then
      rowView.Delete()
  End If
End If



【現在のカーソル行とは関係なく、選択されているセルの行を対象とする場合】
Dim rows = From cell As DataGridViewCell In DataGridView1.SelectedCells
           Let rowView = DirectCast(cell.OwningRow.DataBoundItem, DataRowView)
           Where rowView IsNot Nothing
           Select rowView Distinct

For Each rowView In rows
    rowView.Delete()
Next




> DELETE文でその行を削除し、データベースの方にも反映させるようにしたいです。

削除マークの付いた行に対する DELETE 文を手動で生成する場合は、こんな感じです。

'パラメーター化された DELETE 文を構築 
Dim sql As String = "DELETE FROM T_ITEM WHERE ITEM_ID = @OLD_ITEM_ID"
Dim delCmd As New OleDb.OleDbCommand(sql, conn)

'列の型に合わせること 
Dim oldId As MySqlParameter = delCmd.Parameters.Add("@OLD_ITEM_ID", MySqlDbType.VarChar, 8)

'DataViewRowState を指定して、削除マークの付いた行を取り出す 
Dim deletedRows As New DataView(dt, """", DataViewRowState.Deleted)
For Each rowView As DataRowView In deletedRows
    Dim row As DataRow = rowView.Row

    'DataRowVersion を指定して、該当行の削除前の値を取り出す 
    Dim OLD_ITEM_ID As Object = row("ITEM_ID", DataRowVersion.Original)

    '削除前の主キー値を使って DELETE 文を実行 
    oldId.Value = OLD_ITEM_ID
    delCmd.ExecuteNonQuery()
Next