IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

supprimer ligne dans un dataset lié à un fichier XML


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 93
    Points
    93
    Par défaut supprimer ligne dans un dataset lié à un fichier XML
    bonjour,

    j'ai un dataset qui est remplie d'un fichier xml(RSS) , ensuite je remplie un datagridview avec.

    mais avant j'effectue une recherche dans mon datatset (ligne par ligne) et si je trouve la ligne je la supprime mais cela génère une exception "La collection a été modifée ; l'opération d'énumération risque de ne pas s'exécuter" et la rien ne s'affiche dans la datagridview voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            Dim rssTemp As DataSet = New DataSet()
            Dim titre, lien As String
     
             rssTemp.ReadXml(txtLienRss.Text, XmlReadMode.Auto)
     
            Dim ligne As DataRow
     
            Try
     
                For Each ligne In rssTemp.Tables("item").Rows  
     
                    titre = ligne.Item("title") 
                    lien = ligne.Item("link") 
     
                    If instr(rtbOldRss.Text, titre) > 0 Then
     
                        ligne.Delete()             
     
     
                    End If
     
                Next
             rssTemp.AcceptChanges()
     
            Catch ex As Exception
                MsgBox(ex.Message)
                Exit Sub
            End Try
     
     
            dtgRss.DataSource = rssTemp.Tables("item")
    si quelqu'un peut m'aider ou m'expliquer comment il faut faire . MERCI

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ce n'est pas lié au fait que la source soit un XML, ni même au fait que tu utilises un DataSet... en fait, c'est valable pour toute collection : tu ne peux pas supprimer d'éléments ou en ajouter pendant que tu énumères la collection (For Each). Or quand tu appelles Delete sur un DataRow, ça le supprimer de la DataTable, d'où l'erreur
    Une solution pour contourner ça : dans ta boucle, tu crées une liste des lignes à supprimer, et ensuite tu supprimes chaque ligne qui est dans cette liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
            Dim rssTemp As DataSet = New DataSet()
            Dim titre, lien As String
     
             rssTemp.ReadXml(txtLienRss.Text, XmlReadMode.Auto)
     
            Dim ligne As DataRow
           
            Try
                Dim aSupprimer As New List<DataRow>()
                For Each ligne In rssTemp.Tables("item").Rows  
     
                    titre = ligne.Item("title") 
                    lien = ligne.Item("link") 
     
                    If instr(rtbOldRss.Text, titre) > 0 Then
                        ' On ne la supprime pas tout de suite
                        ' mais on la met de côté pour le faire après
                        ' ligne.Delete()
                        aSupprimer.Add(ligne)
     
     
                    End If
     
                Next
    
             For Each ligne In aSupprimer
                 ligne.Delete()
             Next
    
             rssTemp.AcceptChanges()
     
            Catch ex As Exception
                MsgBox(ex.Message)
                Exit Sub
            End Try
           
     
            dtgRss.DataSource = rssTemp.Tables("item")

  3. #3
    Membre régulier Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 93
    Points
    93
    Par défaut
    salut,

    merci pour ta rapide réponse.


    j'ai remplacé le List<DataRow>() par arrayList et ça marche , mais il faut que fasse des tests


    Merci encore

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par fmh1982 Voir le message
    j'ai remplacé le List<DataRow>() par arrayList
    Ah oui, pourquoi ? Tu es en 1.1 ?

  5. #5
    Membre régulier Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 93
    Points
    93
    Par défaut
    bonjour,

    non je suis en 2.0

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Dans ce cas un List<DataRow> est plus pratique... ça t'évite d'avoir à faire un cast

    EDIT: ah pardon, c'est du VB.NET, pas du C#
    En fait il faut remplacer List<DataRow> par List(Of DataRow)

  7. #7
    Membre régulier Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 93
    Points
    93
    Par défaut
    ca ne fonctionne pas "list n'est pas déclaré"

    sinon j'ai une autre demande , en fait je dois rafraichir ma liste de rss chaque seconde, mais malheureusement au niveau de l'affichage c'est pas top.

    je m'explique , actuellement j'arrive à détecter les nouveaux rss des anciens que j'ai déjà lus, mais quand je charge de nouveau les rss , toute la FORM se bloque le temps que le chargement se termine ( je fais le chargement chaque 5 mn) mais si je veux faire chaque seconde , il n'es plus possible d'utiliser l'application ,
    il y a t-il un moyen de faire un tout le traitement en background et afficher les nouveau rss sans toucher l'interface.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par fmh1982 Voir le message
    ca ne fonctionne pas "list n'est pas déclaré"
    ajoute au début du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Collections.Generic
    Citation Envoyé par fmh1982 Voir le message
    sinon j'ai une autre demande , en fait je dois rafraichir ma liste de rss chaque seconde, mais malheureusement au niveau de l'affichage c'est pas top.

    je m'explique , actuellement j'arrive à détecter les nouveaux rss des anciens que j'ai déjà lus, mais quand je charge de nouveau les rss , toute la FORM se bloque le temps que le chargement se termine ( je fais le chargement chaque 5 mn) mais si je veux faire chaque seconde , il n'es plus possible d'utiliser l'application ,
    il y a t-il un moyen de faire un tout le traitement en background et afficher les nouveau rss sans toucher l'interface.
    Utilise un backgroundworker, ou un thread. Fais une recherche dans le forum, il y a déjà pas mal de discussions sur ce sujet. je crois qu'il y a aussi un tutoriel sur l'utilisation du BackgroundWorker

  9. #9
    Membre régulier Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 93
    Points
    93
    Par défaut
    ok merci , ça marche maintenant .

    merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer ligne dans fichier Txt
    Par lepiaf69 dans le forum VB.NET
    Réponses: 10
    Dernier message: 14/10/2010, 16h35
  2. Supprimer ligne dans un fichier text
    Par Gad29 dans le forum Langage
    Réponses: 10
    Dernier message: 23/05/2007, 09h31
  3. [XML] retour à la ligne dans le texte d'un fichier xml?
    Par shyashah dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 24/04/2007, 09h41
  4. Supprimer lignes dans fichier texte
    Par dr_octopus74 dans le forum VBScript
    Réponses: 1
    Dernier message: 20/02/2007, 17h54
  5. Réponses: 3
    Dernier message: 21/07/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo