c # - Невозможно удалить несколько строк в datagridview с базой данных sqlite

У меня есть 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");
            }

        }
        }

person Mohamed Khamis    schedule 17.10.2017    source источник
comment
это вызывает исключение или просто ничего не происходит?   -  person Daniel B    schedule 17.10.2017
comment
Окно сообщения всплывает несколько раз, если вы выбрали несколько строк и нажали «Удалить»?   -  person MisterMystery    schedule 17.10.2017
comment
Также, где вы пополняете dataGridView1 после очистки в методе удаления?   -  person MisterMystery    schedule 17.10.2017
comment
нет, это не вызывает исключение, и сообщение появляется один раз   -  person Mohamed Khamis    schedule 17.10.2017
comment
я пополняю datatable dt   -  person Mohamed Khamis    schedule 17.10.2017
comment
по совету @MisterMystery я удалил dataGridView1.Rows.Clear(); и теперь сообщение выскакивает несколько раз   -  person Mohamed Khamis    schedule 17.10.2017


Ответы (1)


Я думаю, что проблема связана с dataGridView1.Rows.Clear(); внутри цикла foreach. Поскольку цикл foreach выполняет итерацию по (DataGridViewRow item in dataGridView1.Rows), то после очистки строк не остается ничего для итерации.

person MisterMystery    schedule 17.10.2017
comment
я удалил dataGridView1.Rows.Clear(); и теперь сообщение всплывает несколько раз, я не могу сделать это один раз? - person Mohamed Khamis; 17.10.2017
comment
Вам придется переместить оператор if с окном сообщения за пределы цикла foreach. - person MisterMystery; 17.10.2017
comment
Также не заполняйте таблицу данных из базы данных, пока не завершится цикл foreach. Вы хотите удалить все выбранные строки, а затем заполнить таблицу данных. - person MisterMystery; 17.10.2017
comment
я полностью удалил окно сообщений и сделал пополнение после цикла, но все равно. - person Mohamed Khamis; 17.10.2017
comment
я удалил заправку, и это решило проблему, но как я могу сделать заправку правильно? - person Mohamed Khamis; 17.10.2017
comment
Когда делаете пополнение? В своем цикле пополнения вы устанавливаете для всех флажков значение false, поэтому может случиться так, что вы удаляете одну строку, а затем повторно заполняете, что сбрасывает все флажки и больше не удаляет. - person MisterMystery; 17.10.2017
comment
Исправлено, я не правильно установил пополнение после цикла. - person Mohamed Khamis; 17.10.2017