3- برای ساختن لیست ID ها و گذاشتن اون در commandtext هم باز نیازی به حلقه نیست:

        dim ids=from row as datagridviewrow in DataGridView1.rows where row.cells("id").value isnot nothing select row.cells("id").value
With DataGridView1
Using connection As New SqlConnection(connectionString)
connection.Open()
Using command As New SqlCommand
command.CommandText = "DELETE FROM [YourTable] WHERE [Id] IN (@ids)".replace("@ids",join(ids.toarray,","))
command.ExecuteNonQuery()
End Using
End Using
.DataSource = Nothing
.Rows.Clear()
End With