C # supprimer des éléments de la liste
J'ai une listbox être rempli à partir d'un SQLDATA tirer, et il tire vers le bas des colonnes que je ne veux pas comme OBJECT_dfj, OBJECT_daskd. La clé, c'est l'ensemble de ces cours avec OBJECT_, est-il un moyen de les supprimer de la liste? Je ne peux pas changer mon instruction SQL.
j'ai essayé ceci:
foreach (string item in listBox1.Items)
{
string removelistitem = "OBJECT";
if(item.Contains(removelistitem))
{
listBox1.Items.Remove(item);
}
}
mais il m'a donné le message d'erreur:
Liste que cet agent recenseur est tenu à qui a été modifié. Un agent recenseur peut uniquement être utilisée si la liste ne change pas.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser un agent recenseur, vous devez effectuer une boucle à l'aide d'un indice, en commençant par le dernier point:
Vous ne pouvez pas modifier les références à un agent recenseur, tandis que vous les énumérer sur elle; vous devez garder une trace de ceux à supprimer, puis supprimer.
Ceci est un exemple de la contourner:
Mais si vous êtes à l'aide de c#3.5, vous pourriez dire quelque chose comme ceci.
Vous souhaitez effectuer une itération en arrière à l'aide d'un compteur au lieu de foreach. Si vous parcourez les attaquants, vous devez ajuster le compteur que vous supprimez des éléments.
Vous ne pouvez pas modifier une collection pendant que vous êtes à parcourir avec foreach. Vous pouvez essayer en utilisant un régulier pour ().
Vous devrez peut-être effectuer une itération à rebours à partir de la fin de la collection, pour vous assurer de chaque élément de la collection et de ne pas accidentellement dépassement de la fin de la collecte après la suppression d'un élément (puisque la longueur de la changer). Je ne me souviens pas si .NET des comptes de cette possibilité ou pas.
Le problème ici est que vous changez votre agent recenseur que vous supprimez des éléments de la liste. Ce n'est pas avec un "foreach" en boucle. Mais juste au sujet de n'importe quel autre type de boucle sera OK.
Donc vous pouvez essayer quelque chose comme ceci:
Vous pouvez essayer cette méthode:
Cela devrait être correct, car il copie simplement le contenu d'une liste temporaire qui est ensuite utilisé pour le supprimer de la liste.
Tout le monde, n'hésitez pas à mentionner les corrections que je ne suis pas sûr à 100% c'est tout à fait correct, je l'ai utilisé il y a longtemps.
L'erreur que vous obtenez signifie que
doit être remplacé par
En d'autres termes, ne pas utiliser un foreach.
EDIT: Ajout de la fonte à la chaîne de caractères dans le code ci-dessus
EDIT2: Puisque vous utilisez RemoveAt(), n'oubliez pas que votre indice de l'itération suivante (la variable i dans l'exemple ci-dessus) ne doit pas d'incrémentation (puisque vous venez de supprimer).
Désolé les gars, j'ai dû ajuster la chaîne
Votre question implique que vous êtes prêt à modifier d'autres parties du code, même si vous ne pouvez pas modifier l'Instruction SQL lui-même. Au lieu de les enlever de la zone de liste de la Collection, il pourrait être plus facile de les exclure en premier lieu. Ce code suppose que vous vous connectez à SQL Server:
Mais si vous êtes absolument déterminés à faire de cette façon, vous devriez vérifier cette question sur la modification d'une énumération de collecte lors de l'itération à travers elle.
Vous pouvez l'essayer aussi, si vous ne voulez pas avoir affaire avec l'agent recenseur:
Avec ce code, vous pouvez supprimer chaque élément de votre liste ...
Notez que vous devez écrire ce code dans l'événement click du bouton :
Vous pouvez le faire en 1 ligne, en utilisant Linq
J'ai découvert la manière dure que si votre listbox éléments sont attribués par l'intermédiaire d'une source de données
...à vous de les séparer qu'avant de faire la suppression:
Sans le "
listBoxWork.DataSource = null;
" de ligne, je voulais en venir, "Valeur n'est pas comprise dans la plage attendue"Vous pouvez utiliser le code suivant:
}