Supprimer une ligne d'une Table de données dans un DataSet
J'ai un jeu de données avec plusieurs tables de données à l'intérieur. J'affiche les tables de données dans une liste (je ne savais pas à propos de la liaison de données, lorsque j'ai écrit le code). De toute façon, je voudrais supprimer des lignes dans les tables de données à l'intérieur de l'ensemble de données.
J'ai essayé ceci:
foreach (DataRow row in dsData.Tables["Table1"].Rows)
{
//find the row that contains the username I'm after
if (item.SubItems[2].Text == row["LoginName"].ToString())
{
dsData.Tables["Table1"].Rows.Remove(row); //<- main code of interest
}
}
J'ai aussi essayé de
dsData.Tables["Table1".Rows.Delete(row);
Le problème que je rencontre est que lorsque vous supprimez une ligne-je obtenir de l'exception:
Collection a été modifiée; opération d'énumération peut ne pas s'exécuter.
De ce que je comprends, c'est parce que lorsque vous supprimez une ligne à partir d'une ListView la ligne en dessous de ce qu'elle se déplace et les causes de tous ces ennuis. Le code lui-même ce qu'il est censé, mais elle n'est pas agréable de voir que l'exception lorsque lorsque vous l'exécutez.
J'étais sur le point de réécrire l'ensemble de la classe avec un DataGridView mais plutôt de corriger cette seule ligne, si possible :).
EDIT: je ne suis même pas sûr qu'un DataGridView permettrait de résoudre le problème de toute façon.
Vous devez vous connecter pour publier un commentaire.
de modifier la boucle pour une boucle de comptage à rebours si vous ne recevez pas ce message.
Essayer:
Vous avez besoin d'un rétro boucle for si vous allez supprimer des choses
(explication de pourquoi ici)
en général, vous ne pouvez pas supprimer des éléments à partir d'une collection à l'intérieur d'une boucle qui est une itération sur elle
ce que vous pourriez faire est de garder une liste de tous les la ligne que vous voulez supprimer (le créer à l'intérieur de la boucle) et supprimer tous les de la en DEHORS de la boucle
Vous ne pouvez pas modifier une collection qui vous sont itération avec une boucle foreach, à partir de l'intérieur de la boucle. Faire ceci à la place: