Удаление выбранной строки из DataGrid и базы данных C # - PullRequest
0 голосов
/ 05 декабря 2018

Я знаю, что эта тема часто задаваемый вопрос, но я не могу выяснить проблему здесь.

Проблема в том, что моя кнопка удаления удаляет строку под выбранной строкой. И как расширенная проблемапри попытке удалить последнюю строку произошла ошибка.

Я думаю, что проблема в dataGridView2.Rows[i].Cells[0].Value

Это должно взять значение Id из сетки и удалить соответствующую запись, но этоне работает правильно.Заранее спасибо за помощь.

private void removeButton1_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection("Data Source=TEST;Initial Catalog=TEST;Persist Security Info=True;User ID=123;Password=123"))
        {
            SqlCommand cmd = new SqlCommand();
            conn.Open();
            for (int i = dataGridView2.Rows.Count - 1; i >= 0; i-- )
            {
                DataGridViewRow delrow = dataGridView2.Rows[i];
                if (delrow.Selected == true)
                {
                    dataGridView2.Rows.RemoveAt(i);
                    try
                    {
                        cmd.CommandText = "DELETE FROM dbo.deneme_log WHERE id=" + dataGridView2.Rows[i].Cells[0].Value + "";
                        cmd.Connection = conn;
                        int count = cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
            conn.Close();
        }
    }

1 Ответ

0 голосов
/ 05 декабря 2018

Сначала вы удаляете строку i из таблицы, а затем пытаетесь удалить ее из базы данных, но вы получаете доступ к ней по тому же индексу i, который теперь указывает на следующую строку.В качестве простого исправления вам нужно использовать переменную delrow для построения значения cmd.CommandText.Также в GridView есть свойство SelectedRows, поэтому вам не нужно ходить, выбрасывать все строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...