我是C#编程的新手。我试图删除datagridview中的已检查行。这是我的申请表:
这是我的按钮删除代码:
private void btnDelete_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
object obt = row.Cells["select"].Value;
if ((String)obt == "yes")
{
if (MessageBox.Show("Are you sure you want to delete this item ?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
sqlCommand1.CommandText = "DELETE FROM BARANG WHERE kode_barang = '" + row.Cells[0].Value.ToString() + "'";
sqlConnection1.Open();
sqlCommand1.ExecuteNonQuery();
sqlConnection1.Close();
}
else if (MessageBox.Show("Are you sure you want to delete this item ?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.No)
{
}
}
}
dataSet11.barang.Clear();
sqlDataAdapter1.Fill(dataSet11);
}
通过选中复选框并单击“删除”按钮,我也能够在数据库内删除datagridview中的单个数据。删除数据之前。该程序将显示YesNo messageBox。但是当我试图从gridview中删除多行时。程序将显示messageBox直到3次(我选中的复选框的数量)。我的问题是如何通过显示一个消息框来删除多行。因此,当我删除多行时,我只需要在消息框中单击“是”一次。
答案 0 :(得分:1)
我认为你应该尝试这样的不同方法:
if (MessageBox.Show("Are you sure you want to delete this item ?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
sqlConnection1.Open();
foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
sqlCommand1.CommandText = "DELETE FROM BARANG WHERE kode_barang = '" + row.Cells[0].Value.ToString() + "'";
sqlCommand1.ExecuteNonQuery();
}
sqlConnection1.Close();
}
Datagridview提供获取所选行的功能。您还可以编辑datagridview,以便只允许选择行。 更进一步,每次都要打开连接并不是一件好事。
如果您真的想坚持自己的方法,可以使用break;
退出循环。
我希望我能帮助你。
答案 1 :(得分:0)
这样的东西应该有用,它会提示一次并删除所有行。
private void btnDelete_Click(object sender, EventArgs e)
{
var rowsRemoved = dataGridView1.Rows.Where(x => x.Cells["select"].Value == "yes");
if (MessageBox.Show("Are you sure you want to delete " + rowsRemoved.Count() + " items ?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
foreach(DataGridViewRow row in rowsRemoved)
{
sqlCommand1.CommandText = "DELETE FROM BARANG WHERE kode_barang = '" + row.Cells[0].Value.ToString() + "'";
sqlConnection1.Open();
sqlCommand1.ExecuteNonQuery();
sqlConnection1.Close();
}
}
else
{
}
dataSet11.barang.Clear();
sqlDataAdapter1.Fill(dataSet11);
}