Я почти уверен, что проблема связана с вашим
dataGridView1.Rows.RemoveAt(oneCell.RowIndex);
Здесь вы, кажется, удаляете строку из DataGridView
.Поэтому, когда вы пытаетесь получить индекс из ячейки с oneCell.RowIndex
, он больше не находится ни в одной строке, которая является частью DataGridView
=> RowIndex -1
Попробуйте удалить row
изDataGridView
после попытки доступа к индексу:
private void Button3_Click(object sender, EventArgs e)
{
foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells)
{
if (oneCell.Selected)
{
string deleteQuery = $"DELETE FROM {comboBox1.SelectedItem} WHERE id= " + oneCell.RowIndex;
form1.conn = new SqlConnection($"Server = {form1.ServerBox.Text }; Database = { form1.DBBox.Text}; Trusted_Connection = True");
form1.cmd = new SqlCommand(deleteQuery, form1.conn);
form1.conn.Open();
form1.cmd.ExecuteNonQuery();
form1.conn.Close();
dataGridView1.Rows.RemoveAt(oneCell.RowIndex);
}
}
}
Редактировать:
Как уже упоминали другие в комментариях, вероятно, не самая лучшая идея использовать RowIndex
как id
для базы данных в первую очередь.