C # ListView Tag реализован MySql Удалить - PullRequest
0 голосов
/ 29 января 2019

В настоящее время я занимаюсь разработкой небольшого приложения на C #, в котором у меня есть база данных sql.В моем приложении я создал ListView, показывающий мне все данные из моей таблицы, затем я дал пользователю возможность удалить некоторые из этих данных (нажав на нужную строку (и)), но мне удалось заставить егоудаляю одни данные, но не несколько одновременно, и я не могу найти много документации по этому вопросу.Я все еще пытался с циклом foreach, но ничего, чтобы сделать это занимает только первые выбранные данные.Это, конечно, ошибка с моей стороны, но я все равно прошу вашей помощи;)

Есть мой метод для создания моего ListView:

private void chargerListe()
        {
            listeTest.Clear();
            listViewCustom();
            ListViewItem newP = new ListViewItem();

            connectionBDD();
            SqlCommand sqlRequete = new SqlCommand("", SqlServerDB.ConnectionBase);
            SqlDataReader sqlRdr;

            sqlRequete.CommandText = "Select * From Test;";
            sqlRdr = sqlRequete.ExecuteReader();

            while (sqlRdr.Read())
            {
                newP = new ListViewItem();
                string ID = sqlRdr["ID"].ToString();
                newP.Text = ID;
                newP.Tag = sqlRdr["ID"];

                string nom = EncryptDecrypt.Decrypt(sqlRdr["Nom"].ToString(), "MotDePassePasswordPvlImp");
                newP.SubItems.Add(nom);

                string prenom = sqlRdr["Prenom"].ToString();
                newP.SubItems.Add(prenom);

                string majeur = sqlRdr["Majeur"].ToString();
                newP.SubItems.Add(majeur);

                listeTest.Items.Add(newP);

            }

И есть мое событие delete (с кнопкой):

private void bSupprimer_Click(object sender, EventArgs e)
    {
        connectionBDD();
        SqlCommand sqlRequete = new SqlCommand("", SqlServerDB.ConnectionBase);

        MessageBox.Show("Voulez vous vraiment supprimer les personnes séléctionnés?", "Suppression", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if(listeTest.SelectedIndices.Count != 0)
        {
            foreach (ListViewItem item in listeTest.Items)
            {

                if (item.Selected)
                {

                    int id = (int)listeTest.SelectedItems[0].Tag;
                    MessageBox.Show("TEST " + id);

                    try
                    {
                        sqlRequete.CommandText = "DELETE from Test where ID =" + id + " ;";
                        sqlRequete.ExecuteNonQuery();
                        listeTest.SelectedItems.Clear();
                        chargerListe();
                    }
                    catch
                    {
                        MessageBox.Show("Error with SQL query !", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    }

                }
            }

        }else
        {
            MessageBox.Show("Veuillez selectionner une personne pour pouvoir la supprimer", "Info", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
        }

        listeTest.Refresh();
        initSourceGrid();
        MessageBox.Show("Action effectuée !");
    }

Как видите, я использую тег, чтобы иметь возможность удалять свои данные в базе данных в соответствии с идентификатором.Заранее благодарен;)

1 Ответ

0 голосов
/ 29 января 2019

Почему бы вам просто не удалить все записи в одном и том же DELETE-Statement?Вы можете сделать foreach, как и вы, но в нем вы создадите строку для sqlRequete.CommandText.Это может выглядеть так:

string deleteStatement = "DELETE from Test ";

if (listeTest.SelectedIndices.Count != 0)
{
    foreach (ListViewItem item in listeTest.Items)
    {
        if (item.Selected)
        {
            int id = (int)listeTest.SelectedItems[0].Tag;
            MessageBox.Show("TEST " + id);

            try
            {
                if (!deleteStatement.Contains("WHERE"))
                {
                    deleteStatement += "WHERE ID='" + id + "' ";
                }
                else
                {
                     deleteStatement += "OR ID='" + id + "' ";
                }
            }
            catch
            {
                MessageBox.Show("Error with SQL query !", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
            }
        }
    }
}
else
{
    MessageBox.Show("Veuillez selectionner une personne pour pouvoir la supprimer", "Info", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}

sqlRequete.CommandText = deleteStatement;
sqlRequete.ExecuteNonQuery();
listeTest.SelectedItems.Clear();
chargerListe();

listeTest.Refresh();
initSourceGrid();
MessageBox.Show("Action effectuée !");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...