if (dgvProductCatalog.Rows.Count > 1 && dgvProductCatalog.SelectedRows[0].Index != dgvProductCatalog.Rows.Count - 1)
{
cmd = new SqlCommand("DELETE FROM Products WHERE ProductId= " + dgvProductCatalog.SelectedRows[0].Cells[0].Value.ToString() + " " , connection);
try
{
connection.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
connection.Close();
dgvProductCatalog.Rows.RemoveAt(dgvProductCatalog.SelectedRows[0].Index);
MessageBox.Show("Record Deleted Successfully!");
DisplayData();
ClearData();
}
}
我在点击按钮上使用上面的代码来删除选定的行,但我得到了 " System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。"我在这里做错了什么?
谢谢!
答案 0 :(得分:1)
我会改用currentRow
dgvProductCatalog.CurrentRow.Cells[0].Value
然后
dgvProductCatalog.Rows.RemoveAt(dgvProductCatalog.CurrentRow.Index)
或
dgvProductCatalog.Rows.RemoveAt(dgvProductCatalog.SelectedCells[0].RowIndex)
同样在你的时候,我也会改变这一行
if (dgvProductCatalog.Rows.Count > 1 && dgvProductCatalog.SelectedCells.count > 0)
我的猜测是当selectedCells.Count = -1
时,上面的if语句正在运行最后,仅作为建议,而不是
WHERE ProductId= " + Cell.Value + " "
我会用
WHERE ProductId='" + Cell.Value + "'"
'对于缓解可能的错误非常重要。