gpt4 book ai didi

C# 从 DataGridView 中删除行并更新数据库

转载 作者:搜寻专家 更新时间:2023-10-30 23:40:13 25 4
gpt4 key购买 nike

我正在尝试创建一个应用程序,该应用程序将包含一个 DataGridView,其中数据绑定(bind)到一个 DataSource。我在 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 服务器。

在这种情况下,您需要获得能够唯一标识产品的东西。例如产品 ID。

假设您已将数据库中的 ProductId 列绑定(bind)到 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# 从 DataGridView 中删除行并更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35842753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com