我知道这个主题是一个常见问题,但是我在这里找不到问题。
问题是我的删除按钮正在删除所选行下面的行。作为扩展问题,尝试删除最后一行时出现错误。
我认为问题出在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();
}
}
答案 0 :(得分:2)
首先,您从网格中删除行i
,然后尝试从数据库中删除它,但是您通过相同的索引i
来访问它,该索引现在指向下一行。作为一种简单的解决方法,您需要使用delrow
变量来构造cmd.CommandText
值。并且SelectedRows
中还有GridView
属性,因此您无需遍历所有行。