Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中从datagridview中删除选中的行,并从数据库中删除该记录?_C#_Winforms_Datagridview_Ado.net - Fatal编程技术网

C# 如何在C中从datagridview中删除选中的行,并从数据库中删除该记录?

C# 如何在C中从datagridview中删除选中的行,并从数据库中删除该记录?,c#,winforms,datagridview,ado.net,C#,Winforms,Datagridview,Ado.net,大家好,, 我想通过在C windows窗体的datagridview中选择一行来删除一行,但我还想从数据库中删除此记录。我尝试了以下代码,但无效。请帮助解决此问题 代码: 您应该为从行中提取的项传递一个值。 不能将整行用于此目的。在任何情况下,都应该使用参数化查询 假设网格在名为ITEM_MODEL的列中显示ITEM_MODEL的值 try { delcmd.CommandText = "Delete From ITEM_DETAILS Where ITEM_MODEL=@item";

大家好,, 我想通过在C windows窗体的datagridview中选择一行来删除一行,但我还想从数据库中删除此记录。我尝试了以下代码,但无效。请帮助解决此问题

代码:


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

假设网格在名为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的数据类型。我假设它是一个字符串,所以创建一个字符串类型的参数。如果此假设不成立,则应使用存储在网格列中的值的适当转换来创建参数

我还建议更改网格行上的循环。您正在从Rows集合中删除项,无法使用foreach以安全的方式使用row.Index值。最好使用传统的循环,从末尾向后移动到第一行

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

您的SQL字符串可能是错误的。我假设您不想为ITEM_模型调用row.ToString,其中row是DataGridViewRow。
如果要将其与之进行比较的项目模型位于行的标记中,例如,您可以使用row.Tag而不是row。

不回答您的问题,但您最好在commandtext中使用参数。我跟踪了您,它给了我一个新的错误:找不到名为项目模型的列。正如我所说的。我假设您有一个名为ITEM_MODEL的列。如果这不是名称,则需要将名称替换为列的实际值。用于填充datagridview的select是什么?我的列名是ITEM_MODEL。从ITEM_DETAILS中选择*。因此,在用于填充网格的datatable中存在一个名为ITEM_MODEL?的datacolumn?。查看用于填充网格的代码以及表ITEM_DETAILS中列的名称会很有趣。
for(int x = dg.Rows.Count - 1; x >= 0; x--)
{
    DataGridRow row = dg.Rows[x];
    if (row.Selected)
    {
        dg.Rows.RemoveAt(row.Index);
        .....