如何在C#中从数据网格视图中删除选定的行,并从数据库中删除该记录

本文关键字:删除 记录 数据库 视图 数据 数据网 网格 | 更新日期: 2023-09-27 18:28:53

大家好,我想通过在C#窗体的datagridview中选择一行来删除一行,但我也希望这个记录也应该从数据库中删除。我已经尝试了以下代码,但它不起作用。请帮忙解决这个问题。

代码:

  using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CS"].ConnectionString))
            {
                SqlCommand delcmd = new SqlCommand();
                foreach (DataGridViewRow row in dg.Rows)
                {
                    if (row.Selected)
                    {
                        dg.Rows.RemoveAt(row.Index);
                        try
                        {
                            delcmd.CommandText = "Delete From ITEM_DETAILS Where ITEM_MODEL=" + row + "";
                            con.Open();
                            delcmd.Connection = con;
                            delcmd.ExecuteNonQuery();
                        }
                        catch(Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }
                    }
                }
            }
        }

如何在C#中从数据网格视图中删除选定的行,并从数据库中删除该记录

您的SQL字符串可能是错误的。我假设您不想为ITEM_MODEL调用row.ToString(),其中row is DataGridViewRow
例如,如果要与其进行比较的ITEM_MODEL位于该行的Tag中,则可以使用row.Tag而不是row

您应该为ITEM_MODEL传递一个值,从您的行中提取它
不能使用整行。在任何情况下,您都应该使用参数化查询。

假设ITEM_MODEL的值由网格显示在名为"ITEM_MODEL"的列中

try
{
    delcmd.CommandText = "Delete From ITEM_DETAILS Where ITEM_MODEL=@item";
    con.Open();
    delcmd.Connection = con;
    delcmd.Parameters.AddWithValue("@item", row.Cells["ITEM_MODEL"].Value.ToString());
    delcmd.ExecuteNonQuery();
}

请注意,我不知道数据库表中列ITEM_MODEL的数据类型。我假设它是一个字符串,所以创建了一个字符串类型的参数。如果该假设不成立,则应使用存储在网格列中的值的适当转换来创建参数

我还建议更改网格行上的循环。您正在从"行"集合中删除项目,无法使用该行。使用foreach以安全的方式索引值。更好地使用从末端向后移动到第一行的传统循环

for(int x = dg.Rows.Count - 1; x >= 0; x--)
{
    DataGridRow row = dg.Rows[x];
    if (row.Selected)
    {
        dg.Rows.RemoveAt(row.Index);
        .....