102 votes

Supprimer des lignes spécifiques de DataTable

Je veux supprimer certaines lignes de DataTable, mais cela donne une erreur comme celle-ci,

La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter

j'utilise pour supprimer ce code,

 foreach(DataRow dr in dtPerson.Rows){
    if(dr["name"].ToString()=="Joe")
        dr.Delete();
}

Alors, quel est le problème et comment le résoudre? Quelle méthode conseillez-vous ?

201voto

Widor Points 7307

Si vous supprimez un élément d'une collection, cette collection a été modifiée et vous ne pouvez pas continuer à l'énumérer.

À la place, utilisez une boucle For, telle que :

 for(int i = dtPerson.Rows.Count-1; i >= 0; i--)
{
    DataRow dr = dtPerson.Rows[i];
    if (dr["name"] == "Joe")
        dr.Delete();
}
dtPerson.AcceptChanges();

Notez que vous itérez à l'envers pour éviter de sauter une ligne après avoir supprimé l'index actuel.

19voto

bokkie Points 374

avec cette solution :

 for(int i = dtPerson.Rows.Count-1; i >= 0; i--) 
{ 
    DataRow dr = dtPerson.Rows[i]; 
    if (dr["name"] == "Joe")
        dr.Delete();
} 

si vous allez utiliser la table de données après avoir supprimé la ligne, vous obtiendrez une erreur. Donc ce que vous pouvez faire c'est : remplacer dr.Delete(); par dtPerson.Rows.Remove(dr);

19voto

Phu Chaai Points 1257

Cela fonctionne pour moi,

 List<string> lstRemoveColumns = new List<string>() { "ColValue1", "ColVal2", "ColValue3", "ColValue4" };
List<DataRow> rowsToDelete = new List<DataRow>();

foreach (DataRow row in dt.Rows) {
    if (lstRemoveColumns.Contains(row["ColumnName"].ToString())) {
        rowsToDelete.Add(row);
    }
}

foreach (DataRow row in rowsToDelete) {
    dt.Rows.Remove(row);
}

dt.AcceptChanges();

10voto

Karthik Points 91
DataRow[] dtr=dtPerson.select("name=Joe");
foreach(var drow in dtr)
{
   drow.delete();
}
dtperson.AcceptChanges();

j'espère que ça t'aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X