C# 试图从datagridview中删除所选行,但正在删除多行
这是一个简单的问题,但由于我是C#的新手,我不知道如何解决这个问题。 基本上,我有一个datagridview,它显示MySQL表中的记录。我有一个delete按钮,它通过单击执行sql查询,运行良好,并且还意味着从datgridview中删除所选行。但实际情况是,即使只选择了一行,它也会删除多行。 以下是查询: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
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
遍历所有行。TrdataGridView1。改为选择了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);绝对正确。非常感谢。