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 :

Petit soucis de delete sur un DataTable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Petit soucis de delete sur un DataTable
    Bonjour à tous,

    Je commence à "m'emmeller les pinceaux" entre ces datatable,dataset,datareader,dataApater :-)

    Voici mon soucis.

    Je lis une base de donnée, stock le résultat dans un DataTable.
    Je traite ce DataTable ( export vers fichiers TXT).

    Je souhaiterai parcourir ce DataTable et supprimer certaines lignes suivant un test.

    Je pense arriver à supprimer ma ligne, mais il doit y avoir un soucis de mise à jour entre mes rows et mon DataTable.

    Je précise bien que je ne veux PAS mettre à jour ma base de donnée.

    Je veux juste supprimer des lignes de mon DataTable

    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
     
     DataTable TableArt = new DataTable();                           
     TableArt.Load(MaBase.GetDataReader());                        
     
     // On supprime les colonnes qui ont des stocks purement à zéros.
     
    foreach (DataRow _row in TableArt.Rows)
    {
           if (Double.Parse(_row.ItemArray.GetValue(2).ToString()) == 0)
           {
                 _row.Delete();
           }
     }
     
    foreach (DataRow drArt in TableArt.Rows) /
    {
    // Une exception sera levée ici : Impossible d'accéder via la ligne aux informations de ligne supprimées. 
    }
     
    Je pensea vor ommis quelquechose, mais j'ai beau chercher sur google, je tombe sur de nombreuses méthodes différentes, avec d'autres objets, et je commence à vraiment m'y perdre. 
     
    Je sais également que je pourrais faire mon "filtre" dans ma requete, certes, mais je souhaiterai bien comprendre la manipulation de ces DataTable.
     
    Je vous remercie d'avance de l'attention que vous porterez à ce message.
     
    Cordialement,
     
    Nixeus

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Algérie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Par défaut
    Bonjour,
    pour le petit souci que t'as, tu peux utiliser le filtre sur la table ... puisque t'as pas besoin de mettre a jour la base de données.
    tu n'as qu'as faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonDataTable.DefaultView.RowFilter= "ta condition en lgge sql";
    TonDataTable = TonDataTable.DefaultView.ToTable()
    de cette façon tu auras la nouvelle table qui contient les lignes (rows) correspondantes au filtre.

    J'espere que ceci répond a ta question ... sinon et bien poses moi d'autres questions...
    Bon courage ...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Par défaut
    Bonjour Nixeus

    foreach (DataRow drArt in TableArt.Rows) /
    {
    // Une exception sera levée ici : Impossible d'accéder via la ligne aux informations de ligne supprimées.
    }
    Tu veux accéder à des lignes que tu as supprimées ? Tu peux pas, puisque tu les as déjà supprimées !
    _row.Delete();
    Aucune ambiguïté, la ligne de DataTable est réellement supprimée, donc tu ne peux plus y faire appel plus loin dans le code.
    ..et je commence à vraiment m'y perdre.
    Rassures-toi, nous sommes tous passés par là, et régulièrement cela m'arrive encore. Quand tu as besoin d'aide, toute la communauté va s'efforcer de t'aider.
    ...Je sais également que je pourrais faire mon "filtre" dans ma requete, certes, mais je souhaiterai bien comprendre la manipulation de ces DataTable.
    Effectivement, si tu veux faire autre chose avec les mêmes données, il est plus judicieux de poser un filtre sur ton DataTable, travailler avec le résultat, reposer un autre filtre et travailler avec un autre jeu de résultat, et ainsi de suite.
    Je suis d'accord avec toi, il est important de comprendre le fonctionnement basique du DataTable car il te permet de te sortir de situations où tout espoir semble perdu !
    nachtigal.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Citation Envoyé par nachtigal Voir le message
    Bonjour Nixeus


    Tu veux accéder à des lignes que tu as supprimées ? Tu peux pas, puisque tu les as déjà supprimées !

    Aucune ambiguïté, la ligne de DataTable est réellement supprimée, donc tu ne peux plus y faire appel plus loin dans le code.

    Rassures-toi, nous sommes tous passés par là, et régulièrement cela m'arrive encore. Quand tu as besoin d'aide, toute la communauté va s'efforcer de t'aider.

    Effectivement, si tu veux faire autre chose avec les mêmes données, il est plus judicieux de poser un filtre sur ton DataTable, travailler avec le résultat, reposer un autre filtre et travailler avec un autre jeu de résultat, et ainsi de suite.
    Je suis d'accord avec toi, il est important de comprendre le fonctionnement basique du DataTable car il te permet de te sortir de situations où tout espoir semble perdu !
    nachtigal.
    Merci à vous deux pour votre investissement;

    Je vais éssayer le rowfilter, que je ne connaissais pas.

    En revanche nachtigal, je ne cherche pas à accéder à des lignes supprimées, je veux juste supprimer les lignes avec un stock à 0, ce traitement est fais dans mon ForEach.

    Dans le ForEach d'après, je voudrais accéder au reste ( c'est a dire, ce qui reste après la suppression, c'est à dire, mes lignes avec un stock différent de zéro)

    Tu comprends ?

    Encore merci

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 500
    Par défaut
    C'est bizarre.
    Moi, pour ce genre de problématique, je passe par des DataView
    http://msdn.microsoft.com/fr-fr/libr...ew(VS.80).aspx

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Plusieurs choses
    1- Les dataview c'est effectivement une bonne maniere de filtrer, trier, rechercher dans une datatable

    2- Evite de modifier une collection dans un parcours foreach : le for next est plus approprié ici !!

    3- Le delete ne supprime pas PHYSIQUEMENT le Row la reference subsiste toujours avec un RowState deleted !

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Citation Envoyé par olibara Voir le message
    Plusieurs choses
    1- Les dataview c'est effectivement une bonne maniere de filtrer, trier, rechercher dans une datatable

    2- Evite de modifier une collection dans un parcours foreach : le for next est plus approprié ici !!

    3- Le delete ne supprime pas PHYSIQUEMENT le Row la reference subsiste toujours avec un RowState deleted !
    Je trouve ca vraiment dommage de devoir passer d'un DataTable à un DataView pour faire ce genre de chose. On est censé gagner du temps avec c#, mais j'ai l'impression que ca n'est pas toujours le cas, pourquoi devoir passer de DataTable à DataAdapter à DataView...etc

    Si le delete ne supprime pas physiquement ma row , alors si on reviens à mon premier message, comment faire ? AcceptChanges ne semble pas résoudre mon problème.

    Merci

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Nixeus Voir le message
    Je pense arriver à supprimer ma ligne, mais il doit y avoir un soucis de mise à jour entre mes rows et mon DataTable.
    Essaye d'appeler tableArt.AcceptChanges() après avoir fait tes suppressions de lignes.
    Citation Envoyé par MSDN
    When AcceptChanges is called, any DataRow object still in edit mode successfully ends its edits. The DataRowState also changes: all Added and Modified rows become Unchanged, and Deleted rows are removed.

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

Discussions similaires

  1. [MySQL] petit soucis d'insert sur deux table
    Par speedylol dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/02/2009, 12h09
  2. Petits soucis de tri sur un vecteur
    Par d.jphilippe dans le forum Fortran
    Réponses: 3
    Dernier message: 01/08/2008, 23h00
  3. [Debian_Etch] Petits soucis de performance sur un serveur
    Par Arnulf dans le forum Administration système
    Réponses: 7
    Dernier message: 22/01/2008, 17h09
  4. Réponses: 8
    Dernier message: 04/08/2006, 15h24
  5. petit soucis pour lire sur un port usb le createfile n'accep
    Par anthonycosson dans le forum Windows
    Réponses: 5
    Dernier message: 14/02/2006, 09h34

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