从DataGrid和数据库C#中删除选定的行

时间:2018-12-05 11:20:10

标签: c# sql

我知道这个主题是一个常见问题,但是我在这里找不到问题。

问题是我的删除按钮正在删除所选行下面的行。作为扩展问题,尝试删除最后一行时出现错误。

我认为问题出在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 :(得分:2)

首先,您从网格中删除行i,然后尝试从数据库中删除它,但是您通过相同的索引i来访问它,该索引现在指向下一行。作为一种简单的解决方法,您需要使用delrow变量来构造cmd.CommandText值。并且SelectedRows中还有GridView属性,因此您无需遍历所有行。