如何从datagridview中删除选定的行?

时间:2016-02-02 23:08:36

标签: c# exception-handling

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:索引超出范围。必须是非负数且小于集合的大小。"我在这里做错了什么?

谢谢!

1 个答案:

答案 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 + "'" 

'对于缓解可能的错误非常重要。