C# 试图从datagridview中删除所选行,但正在删除多行

C# 试图从datagridview中删除所选行,但正在删除多行,c#,mysql,datagridview,delete-row,C#,Mysql,Datagridview,Delete Row,这是一个简单的问题,但由于我是C#的新手,我不知道如何解决这个问题。 基本上,我有一个datagridview,它显示MySQL表中的记录。我有一个delete按钮,它通过单击执行sql查询,运行良好,并且还意味着从datgridview中删除所选行。但实际情况是,即使只选择了一行,它也会删除多行。 以下是查询: private void delete_btn_Click(object sender, EventArgs e) { foreach (DataGri

这是一个简单的问题,但由于我是C#的新手,我不知道如何解决这个问题。 基本上,我有一个datagridview,它显示MySQL表中的记录。我有一个delete按钮,它通过单击执行sql查询,运行良好,并且还意味着从datgridview中删除所选行。但实际情况是,即使只选择了一行,它也会删除多行。 以下是查询:

    private void delete_btn_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            string constring = @"server = localhost; user id = root; password = pass; persistsecurityinfo = false; database = mapping; allowuservariables = false";
            using (MySqlConnection con = new MySqlConnection(constring))
            {
                using (MySqlCommand cmd = new MySqlCommand("UPDATE deletion SET date_time = UTC_TIMESTAMP() where product_id =" + proid_txtbx.Text, con))
                {
                    cmd.Parameters.AddWithValue("@product_id", row.Cells["product_id"].Value);
                    cmd.Parameters.AddWithValue("@product_name", row.Cells["product_name"].Value);
                    cmd.Parameters.AddWithValue("@category_id", row.Cells["category_id"].Value);
                    cmd.Parameters.AddWithValue("@date_time", row.Cells["date_time"].Value);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                foreach(DataGridViewRow item in this.dataGridView1.SelectedRows)
                {
                   dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
                }
            }
        }
截图: 应删除第6行: 单击“删除”按钮时,其他行将被删除
我认为您的问题在于您的
foreach
循环。您正在使用
dataGridView1.rows
遍历所有行。Tr
dataGridView1。改为选择了Rows

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    if (!row.IsNewRow) dataGridView1.Rows.Remove(row);

创建新命令怎么样,比如

从product\u id=?

之后,您可以获取所选项目索引的值:

int product_id = Convert.ToInt32(DataGridView1.SelectedRows[0].Cells[0].Value)
最后,运行命令并将从命令中获得的product_id int传递给它。我认为它应该可以正常工作…

您可以使用:

private void delete_btn_Click(object sender, EventArgs e)
{
   //Works even when whole row is selected.
   int rowIndex = datagridview.CurrentCell.RowIndex;

   //You can also then easily get column names / values on that selected row
   string product_id = datagridview.Rows[rowIndex].Cells["Column Name Here"].Value.ToString();

   //Do additional logic

   //Remove from datagridview.
   datagridview.Rows.RemoveAt(rowIndex);

}

您的命令甚至没有参数。运行它时可能会出现异常。cmd.Parameters.AddWithValue(“@product\u id”,row.Cells[“product\u id”].Value);绝对正确。非常感谢。