我正在尝试创建一个应用程序,该应用程序将包含数据绑定到数据源的datagridview。我在form_load上使用fill方法,我想知道如何同时从表和数据库/数据源中删除一个或多个复选框行。
我在“删除”按钮上使用此代码,但它不会永久删除选定的行。有什么帮助吗?

for (int i = 0; i < Products.Rows.Count; i++)
{
    DataGridViewRow dr = Products.Rows[i];
    if (dr.Selected == true)
    {
        Products.Rows.RemoveAt(i);
    }
}

最佳答案

您要做的是仅从DataGridView中删除所选行。
您没有进行任何数据库调用来删除行。
我假设您使用的是Microsoft SQL Server。
在这种情况下,你需要得到的东西,唯一的产品标识。例如产品ID。
假设您已经将数据库中的ProductId列绑定到DataGridView中的某个列。
你的代码应该如下。

//string variable to capture product Ids for selected products
System.Text.StringBuilder productIds = new System.Text.StringBuilder(string.empty);

for (int i = 0; i < Products.Rows.Count; i++)
{
    DataGridViewRow dr = Products.Rows[i];

    if (dr.Selected == true)
    {
        Products.Rows.RemoveAt(i);

        productIds.Append(productIds.length > 0 ? "," + Convert.ToString(dr["ProductId"]) : Convert.ToString(dr["ProductId"]));
    }
}

DeleteProducts(productIds.ToString());

现在您的DeleteProducts方法应该如下所示。
private int DeleteProducts(string productIds)
{
    int recordsDeleted = 0;

    using (SqlConnection conn = new SqlConnection("Your connection string here"))
    {
        try
        {
            using (SqlCommand cmd = new SqlCommand("Your SQL Stored Procedure name here", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                SqlParameter paramProductIds = new SqlParameter("@productIds", varchar(2000));
                paramProductIds.Value = productIds;

                cmd.Parameters.Add(paramProductIds);

                conn.Open();

                recordsDeleted = cmd.ExecuteNonQuery();
            }
        }
        finally { conn.Close(); }

    }

    return recordsDeleted;
}

您的存储过程应该如下所示(假设是ms sql server)。
CREATE PROCEDURE DeleteProducts
    @productIds VARCHAR(2000)
AS
BEGIN
    DELETE FROM Products WHERE ProductId IN (SELECT item FROM dbo.Split(',', @productIds))
END

关于c# - C#从DataGridView删除行并更新数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35842753/

10-16 17:22
查看更多