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

C# Discussion :

DataSet.Dispose() ne nettoye pas complètement le DataSet


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut DataSet.Dispose() ne nettoye pas complètement le DataSet
    Bonjour,

    J'écris une appli SDI pour visualiser et éditer des fichiers xml en fonction de règles particulières.

    J'ai un bouton "Open file" qui déclenche le chargement d'un fichier xml dans un DataSet pour le visualiser dans un DataGridView.

    Le problème est que quand j'essaye de charger un 2ème fichier xml après en avoir déjà ouvert et fermé un autre, le DataSet de travail que j'utilise contient encore les colonnes du précédent DataSet malgré l'appel à DataSet.Dispose() (et le nettoyage du DataGridView) effectué avant de charger le nouvel xml (voir code ci-dessous).

    Si j'essaye d'utiliser la fonction "Clear" sur les colonnes, je reçois une exception parce que la "constraint table" d'une table se réfère à ces colonnes. C'est le cas, même si je "Clear" la table auparavant.

    Comment faire pour nettoyer complètement mon DataSet?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dataGridView.DataMember = null;
    dataGridView.DataSource = null;
    dataGridView.SuspendLayout();
    dsOriginDataSet.Clear();
    dsOriginDataSet.Dispose(); // Les tables et colonnes sont toujours présentes après le Dispose()

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut Solution
    La solution:

    Puisque Dispose() laisse des "traces" dans le DataSet, j'assigne une nouvelle instance de DataSet à mon DataSet de travail:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dataGridView.DataMember = null;
    dataGridView.DataSource = null;
    dataGridView.SuspendLayout();
    dsOriginDataSet.Clear();
    dsOriginDataSet.Dispose(); 
    dsOriginDataSet = new DataSet();
    Je ne suis pas sûr que ce soit très orthodoxe mais ça marche. Si vous avez une meilleure idée, n'hésitez pas à me la communiquer.

    Merci

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

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

Discussions similaires

  1. [VS2003] : création des dataset qui ne fonctionne pas
    Par skystef dans le forum Visual Studio
    Réponses: 0
    Dernier message: 20/08/2007, 16h11
  2. DataSet.Dispose() ne libere pas l'objet
    Par saim.mohamed dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/05/2007, 16h43
  3. [C# Dataset] Je n'arrive pas a faire une simple requête.?
    Par zoltix dans le forum Accès aux données
    Réponses: 4
    Dernier message: 16/02/2007, 16h22
  4. pb Displaylabel n'est pas conservé dans DataSet
    Par dem dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/10/2005, 09h55
  5. [VB.NET] DataSet qui ne retourne pas de résultat
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2004, 17h07

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