Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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-无法使用sqlite数据库删除datagridview中的多行_C#_Sqlite_Checkbox_Datagridview_Delete Row - Fatal编程技术网

C# c-无法使用sqlite数据库删除datagridview中的多行

C# c-无法使用sqlite数据库删除datagridview中的多行,c#,sqlite,checkbox,datagridview,delete-row,C#,Sqlite,Checkbox,Datagridview,Delete Row,我有一个datagridview,我在其中添加了一些列,第一列有复选框 当我尝试使用复选框选择多行并删除它时,即使选择多行,每次也只删除一行 我用于填充datagridview的代码 SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From Data", con); DataTable dt = new DataTable(); da.Fill(dt); foreach (DataR

我有一个datagridview,我在其中添加了一些列,第一列有复选框 当我尝试使用复选框选择多行并删除它时,即使选择多行,每次也只删除一行

我用于填充datagridview的代码

 SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From Data", con);
        DataTable dt = new DataTable();
        da.Fill(dt);

        foreach (DataRow item in dt.Rows)
        {
            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = "false";
            dataGridView1.Rows[n].Cells[1].Value = item["id"].ToString();
            dataGridView1.Rows[n].Cells[2].Value = item["car_num"].ToString();
            dataGridView1.Rows[n].Cells[3].Value = item["customer"].ToString();
            dataGridView1.Rows[n].Cells[4].Value = item["driver"].ToString();
            dataGridView1.Rows[n].Cells[5].Value = item["first"].ToString();
            dataGridView1.Rows[n].Cells[6].Value = item["second"].ToString();
            dataGridView1.Rows[n].Cells[7].Value = item["sum"].ToString();
            dataGridView1.Rows[n].Cells[8].Value = item["price"].ToString();
            dataGridView1.Rows[n].Cells[9].Value = item["date1"].ToString();
            dataGridView1.Rows[n].Cells[10].Value = item["date2"].ToString();
            dataGridView1.Rows[n].Cells[11].Value = item["city"].ToString();
            dataGridView1.Rows[n].Cells[12].Value = item["type"].ToString();

        }
我用于删除的代码

private void bDelete_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow item in dataGridView1.Rows)
        {

                if (bool.Parse(item.Cells[0].Value.ToString()))
            {
                if (MessageBox.Show("Are you sure you want to delete these data ? ", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                {
                    con.Open();
                SQLiteCommand cmd = new SQLiteCommand("Delete From Data Where id='"+item.Cells[1].Value.ToString()+"'", con);
                cmd.ExecuteNonQuery();
                con.Close();
                SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From Data", con);
                DataTable dt = new DataTable();
                dataGridView1.Rows.Clear();

                da.Fill(dt);
                MessageBox.Show("Success");
            }

        }
        }

我认为问题在于dataGridView1.Rows.Clear;在foreach循环内部。因为foreach循环迭代dataGridView1.Rows中的DataGridViewRow项,所以在清除这些行之后,就没有什么可迭代的了

它是否引发en异常或什么都没有发生?如果您选择了多行并单击“删除”,消息框是否会多次弹出?在delete方法中清除dataGridView1后,您在何处重新填充dataGridView1?否,它不会引发异常,并且在重新填充datatable dti removed dataGridView1.rows.Clear后会弹出消息;现在,消息会弹出多次,我不能只执行一次吗?您必须将带有消息框的if语句移到foreach循环之外。另外,在foreach循环完成之前,不要从数据库中重新填充datatable。您希望删除所有选定的行,然后重新填充数据表。我完全删除了messagebox,并在循环后重新填充,但仍然是一样的。我删除了重新填充,这解决了问题,但如何正确地重新填充?