Supprimer plusieurs lignes de données dans DataGridView et mettre à jour vers la base de données SQL

Le billet de blog précédent a présenté en détail la suppression des données dans DataGridView, et les démonstrations étaient basées sur une véritable suppression et une fausse suppression. Pour plus de détails, veuillez consulter:
https://blog.csdn.net/qq_39217004/article/details/105366769

Supprimer plusieurs lignes de données dans DataGridView et mettre à jour vers la base de données SQL

Ce qui suit illustre l'implémentation de la suppression sur plusieurs lignes des données sur le contrôle: (indiqué par la colonne de faux bits de suppression, la véritable suppression n'a besoin que de modifier l'instruction sql)
Les résultats de la démonstration seront décrits plus tard, regardez d'abord le processus d'implémentation:
// Sélection de la souris à supprimer Les données
// Obtenir le StuId des données à supprimer
// Juger le nombre de choix, si le nombre de choix est supérieur à 0, supprimer, sinon il vous invite à ce qu'aucune
opération de sélection // delete ne démarre la transaction dans le code

1. Utilisez la souris pour sélectionner les données à supprimer et obtenir le StuId des données à supprimer

 List<int> listIds = new List<int>();//定义一个泛型 存储要删除的Id号
 for (int i = 0; i < dgvStudents.Rows.Count; i++)//遍历表中的所有行数,获取选中的行数据
 {
     DataGridViewCheckBoxCell cell = dgvStudents.Rows[i].Cells["colCheck"] as DataGridViewCheckBoxCell;//获取复选框
     //若cell.Value值为 null,即没选中任何行,则chk为false,否则只要选中了某一行,则返回true
     bool chk = Convert.ToBoolean(cell.Value);//若选中的数量不为0
     if (chk)
     {
         //获取行数据并把数据存储在listIds泛型中
         DataRow dr = (dgvStudents.Rows[i].DataBoundItem as DataRowView).Row;
         int stuId = (int)dr["StuId"];
         listIds.Add(stuId);
     }
 }

2. Déterminez le nombre de choix, si le nombre de choix est supérieur à 0, supprimez, sinon cela vous
indique que vous n'avez pas choisi d' utiliser la classe SqlTransaction pour démarrer une transaction, ce qui suit est un lien de référence spécifique à usage fixe
/https://docs.microsoft.com/zh-cn /dotnet/api/system.data.sqlclient.sqltransaction?view=netframework-4.8

  using (SqlConnection conn =new SqlConnection(SqlHelper.connString))
 {
     //事务启动是通过conn来开启
     conn.Open();
     SqlTransaction trans = conn.BeginTransaction();//开启一个事务
     SqlCommand cmd = new SqlCommand(); //利用SqlCommand执行事务
     //固定用法
     //为挂起的本地事务将事务对象和连接都分配给命令对象
     cmd.Connection = conn;
     cmd.Transaction = trans;
  }

Tout d'abord, parcourez la classe générique, passez les paramètres à SqlParameter, puis validez la transaction et retournez le nombre de lignes affectées;
notez que l'exception catch in catch a l'instruction suivante, qui est l'utilisation fournie par Microsoft
trans.Rollback (); Utilisation, annulez la transaction de l'état suspendu
Remarque: Elle
doit être effacée à chaque fois que la boucle passe des paramètres;

 try
 {                          
     foreach (int id in listIds)
     {
         //cmd.CommandText = "delete from StudentInfo where StuId=@StuId";//真删除
         cmd.CommandText = "update StudentInfo set IsDeleted=1 where StuId=@stuId";//假删除
         SqlParameter para = new SqlParameter("@StuId",id);
         cmd.Parameters.Clear();
         cmd.Parameters.Add(para);
         count += cmd.ExecuteNonQuery();
     }
     trans.Commit();//提交事务,代表所有的事务已经提交到数据库
     Console.WriteLine("Both records are written to database.");
 }
 catch (SqlException ex)
 {
     trans.Rollback();//catch特定用法,从挂起状态滚回事务
     MessageBox.Show(ex.Message, "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
     return;
 }

Si le nombre de lignes affectées renvoyé ci-dessus est identique à la valeur de la classe générique (le nombre de lignes que vous avez sélectionnées manuellement), vous êtes invité à supprimer avec succès; et supprimez les informations sélectionnées dans datagridview

if (count == listIds.Count)
{
    MessageBox.Show("选中的学生信息删除成功", "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    //列表的手动刷新
    DataTable dtStudents = (DataTable)dgvStudents.DataSource;//获取数据源
    string idStr = string.Join(",",listIds);
    DataRow[] rows = dtStudents.Select("StuId in (" + idStr + ")");
    foreach (DataRow dr in rows)
    {
        dtStudents.Rows.Remove(dr);
    }
    dgvStudents.DataSource = dtStudents;
}

Notez que la méthode de suppression des informations sélectionnées:

//是把选中的信息用,做字符串分隔,
string idStr = string.Join(",",listIds);
//要用来筛选行的条件    具体请参考ataView RowFilter 语法
DataRow[] rows = dtStudents.Select("StuId in (" + idStr + ")");

Par exemple, après avoir sélectionné 1002 1004 1005 (StuId) trois lignes d'informations
, après avoir exécuté cette phrase,

idStr =1002,1004,1005//筛选条件
"StuId in "1002,1004,1005""

Insérez la description de l'image ici
À ce stade, le processus de code a été montré

Voici une démonstration des résultats obtenus:

1. Informations initiales dans la base de données
Insérez la description de l'image ici
2. Charger les informations
sur l' interface de l'ordinateur hôte Sélectionnez le nombre de lignes à supprimer dans la case à cocher, cliquez sur le bouton "Supprimer", puis cliquez sur "OK"
Insérez la description de l'image ici
3. Les trois lignes de données sélectionnées sur l'interface disparaissent
Insérez la description de l'image ici
4. Vérifiez la base de données Informations, cliquez sur "Exécuter", vous pouvez voir que les trois lignes sélectionnées de drapeaux de données sont déjà 1, ce qui signifie que la fausse suppression est réussie.
Insérez la description de l'image ici
5. Lorsque le programme est redémarré, la suppression est que les informations ne seront pas affichées sur l'interface.
Insérez la description de l'image ici

À ce stade, la fonction de suppression de plusieurs lignes d'informations a été pleinement réalisée;
vous êtes invités à critiquer et à corriger! !

Publié 18 articles originaux · loué 0 · visites 233

Je suppose que tu aimes

Origine blog.csdn.net/qq_39217004/article/details/105388283
conseillé
Classement