C#如何退出WFA中的Foreach循环

时间:2015-09-23 05:59:34

标签: c# winforms datagridview

我是C#编程的新手。我试图删除datagridview中的已检查行。这是我的申请表:

enter image description here

这是我的按钮删除代码:

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次(我选中的复选框的数量)。我的问题是如何通过显示一个消息框来删除多行。因此,当我删除多行时,我只需要在消息框中单击“是”一次。

2 个答案:

答案 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);
}