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

Windows Forms Discussion :

Filtrer une dataTable sur une colonne


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut Filtrer une dataTable sur une colonne
    Bonjour !

    je développe avec VS2008, en C# Windows forms.
    J'ai une dataTable remplie au préalable, et source d'un dataGridView.

    Suite à une action de l'utilisateur, la liste contenue dans la table (une liste de pièces d'échafaudages ^^) est mise à jour, la colonne 'Quantité' est modifiée pour certaines pièces.
    Suite à cette modif des quantitées, j'aimerais créé une vue de cette table ne contenant que les lignes dont la quantité est supérieur à 0...

    y'a -t-il un outil simple pour cela ? j'ai commencé à regarder la 'defaultView' de ma dataTable, mais j'ai un peu du mal...
    Donc si vous avez une solution ou un lien d'un bon tuto sur les dataTable en C# je suis preneur ! =)

    merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    tu souhaite affiché les enregistrement dont la quantité est à 0 dans la même grid ou dans une autre?

    Si c'est dans la même grid utilise datatable.defautView.RowFilter.

    Si tu veux l'afficher dans une autre grille il va falloir créer une autre dataTable et y mettre les lignes que tu souhaites afficher puis la mettre en datasource de ta 2eme grille.

  3. #3
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    deja, merci pour ta réponse =)

    et je ne souhaite pas afficher les éléments dont la quantité est à 0... ils le sont juste à l'ouverture du formulaire, et les actions (dans un autre form ouvert ensuite) de l'utilisateur modifie les quantités des éléments. Les modif arrivent toutes en même temps, pour ca y'a pas de soucis à priori...

    ce que je veux, c'est obtenir une vue (ou une table) contenant les lignes où la quantité est supérieur à 0.

    EDIT :
    je suis en train de bosser dessus, j'avance un peu grâce à msdn (ici) mais je bloque car ma quantité est dans une colonne du DataGridView que j'ajoute en code... et donc pas présente dans ma DataTable
    J'ai voulu l'ajouté à ma table et/ou à ma vue, j'ai une erreur
    Impossible d'ajouter ou de supprimer des colonnes à partir de la table une fois que le DataSet est mappé à un document XML chargé
    donc j'ai voulu détourner ca en mettant d'abord comme DataSource de mon grid une 'copy' ou un 'clone' de ma table, mais ca me retourne la même erreur...

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    tu utilises le générateur de dataset de VS ?

  5. #5
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    non, je n'ai même pas de dataSet défini, je ne créé qu'une dataTable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataTable dt_multicrab; //table de base
    dt_multicrab = om_Pièce.ChargerTable();  //je charge la table depuis mon fichier xml
    DataTable dt_temp = new DataTable();  //définition d'une table temporaire
    dt_temp = dt_multicrab.Clone();  //je lui attribue un clone de ma table 
    this.dgw_Pièces.DataSource = dt_temp;
    edit : j'ai essayé de définir le dataSource du gridView à null, ca ne change rien...

    l'erreur se produit lorsque j'ajoute une colonne à ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dt_multicrab.Columns.Add(MonNomdeColonne);

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    essai comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dt_multicrab.Columns.Add("Qté",typeof(int));

  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    ton problème est assez ancien, chez les C#istes. Ce qui ne le rend pas non pertinent, bien au contraire
    cf par exemple : http://www.developpez.net/forums/d19...inding-avance/

    Le binding laisse un goût d'inachevé avec les winforms, le filtrage étant très (mais alors très très) demandé par les clients d'un application grillo-centrée.

    J'utilise personnellement une implémentation de IBindingListView, trouvée ici (on peut la trouver aussi .)
    Ca marche nickel.

  8. #8
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    en fin de compte, je suis bien resté sur la solution d'une List<>, et pour ce qui est du filtre, je l'ai fait "maison" bien plus rapide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Collection Filtrer()
            {
                Collection retour = new Collection();
                foreach (om_Pièce p in this)
                {
                    if (p.Total > 0)
                        retour.Add(p);
                }
                return retour;
            }
    merci pour toutes vos réponses et votre aide !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2014, 11h21
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 5
    Dernier message: 13/07/2013, 12h24
  4. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  5. Réponses: 4
    Dernier message: 15/10/2009, 13h33

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