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 :

Problème après tri d'une colonne d'une DatagridView


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Problème après tri d'une colonne d'une DatagridView
    Bonjour ,
    Je développe actuellement une application c# winform dans laquelle il y a une DataGridView (remplit à l'aide des données d'une bd MySQL).
    J'ai un menu Toolbar qui me permet de récupérer les différentes données de ma bdd .

    Par exemple :
    Au clique sur menu1 j'affiche les données de la table1 dans la datagridview
    menu2 -> table 2
    etc..

    Cependant lorsque l'on clique sur le Header d'une des colonnes de ce datagridview , la colonne est trié (il s'agit d'une propriété de base du composant) , cela fonction très bien par contre si je clique sur le header d'une de mes colonnes puis que je change de table l'application plante.

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans System.Data.dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      for (int i = 0; i < list[0].Count; i++)
                    {
                        dtSource.Rows.Add(new object[] { i, list[0][i], list[1][i], list[2][i] });
     
                        for (int j = 0; j < 31; j++)
                        {
                            tabdata[j, i] = list[j][i];
                        }
                    }
    l'exeception a lieu au niveau de la ligne de code suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dtSource.Rows.Add(new object[] { i, list[0][i], list[1][i], list[2][i] })

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Est tu sur que list[0][i], list[1][i] et list[2][i] contient bien des données valide à ce moment, a voir en mode debug ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bonjour ericlm128 ;
    J'ai donc vérifié en mode debug en plaçant un point d'arrêt sur la ligne qui semble poser problème.
    La première fois que la boucle for s’exécute (i=0) , pas de soucis , list contient bien des données valide , le list.Count récupère bien le nombre d'élément présent dans ma bd.
    Ensuite à la 2éme exécution (i=1) l'erreur apparaît alors que les valeurs semble avoir été stocké dans la list.

    J'ai du mal a visualiser d'ou viens le problème parce que dans tout les autres cas de figure l'application fonctionne :'(
    Le problème viens vraiment que lorsque l'on clique sur le header d'une colonne pour trier cette dernière.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut, il faut plus de code on ne voit rien ici

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Donc que contient list[0][1], list[1][1] et list[2][1] ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je vient de voir un truc, est tu sur de ta syntaxe ?

    Tu compte le nombre de sous élément présent dans le premier élément de ta liste 'list[0].Count' et après tu interroge les autres éléments 'list[0][i], list[1][i], list[2][i]'.

    Je ne comprend pas cela, comment stock tu tes données ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      for (int i = 0; i < list[0].Count; i++)
                    {
                        dtSource.Rows.Add(new object[] { i, list[0][i], list[1][i], list[2][i] });

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Août 2013
    Messages : 51
    Points : 74
    Points
    74
    Par défaut
    Tu peux gérer l'erreur avec événement DataError

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Je vient de voir un truc, est tu sur de ta syntaxe ?

    Tu compte le nombre de sous élément présent dans le premier élément de ta liste 'list[0].Count' et après tu interroge les autres éléments 'list[0][i], list[1][i], list[2][i]'.

    Je ne comprend pas cela, comment stock tu tes données ?
    Bonjour , désolé d'avoir mis autant de temps pour répondre je n'ai pas eu l'occasion de retravailler sur l'application ces derniers jours.

    Donc j'utilise 'list[0].Count' pour compter le nombres de colonne de la table dans laquelle je récupère les informations.
    Par exemple si m'a table contient les colonnes :

    NOM | PRENOM | AGE | TEL
    le 'list[0].Count' me retournera 4

    Ensuite j'interroge les autres éléments 'list[0][i], list[1][i], list[2][i]' de maniére a pouvoir exploiter les données.
    Par exemple si ma table contient :

    NOM | PRENOM | AGE | TEL
    DUPONT | JEAN | 20 | 03...

    list[0][0] contiendra 'DUPONT'
    list[1][0] -> 'JEAN'
    list[2][0] -> '20'

    pour résumer :
    que ce soit list[0][i] , list[1][i] ... list[x][i] ils contiennent tous le même nombre d'élément , c'est à dire , le nombre de colonne de ma table.


    Edit : j'ai dit n'importe quoi , désolé. Je corrige sa dans mon prochain message

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Donc tu as un nombre de ligne fixe (3) et un nombre de colonne variable si je comprend bien.
    list[Ligne][Colonne]

    A cette ligne 'tabdata[j, i] = list[j][i];" pourquoi interroge tu la ligne 30 de ta liste si elle est fixe à 3 ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bonjour , désolé dans mon dernier message je raconte n'importe quoi ...
    Donc en faite j'utilise list[0].count afin de compter le nombre d'éléments présents dans ma table.
    Donc concernant t'as question :

    A cette ligne 'tabdata[j, i] = list[j][i];" pourquoi interroge tu la ligne 30 de ta liste si elle est fixe à 3 ?
    Enfaite j'ai 30 colonnes dans ma table , j'ai répondue rapidement est en faisant des test je me suis rendue compte que je m'étais trompé dans mon explication

    Pour résumé j'utilise 'list[0].Count' pour compter le nombre d'éléments dans ma table (qui peut varier au fur et à mesure des inserts,delete,etc...).
    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for (int j = 0; j < 31; j++)
    Me permet de récupérer les données dans chaque colonnes (30 colonnes).

    Désolé d'avoir complétement fail mon précédent message.

    Par contre j'ai du mal a comprendre pourquoi l'application plante lorsque je clicque sur le header de la datagridview alors que je peux passer d'une table a une autre sans problème du moment que je ne clique pas sur le header tout semble fonctionner sans soucis

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    K,

    Utiliserait tu l'évènement CellClick et as tu géré le "e.RowIndex == -1" ?
    Ce que je veux dire c'est qu'un clique dans le header génère cette évènement (il me semble).

    Sinon en mode débug tu peut facilement trouver d’où ça plante ? la ligne concernée ?

    Pas sur : J'ai lu aussi qu'il était préférable de remplacer les valeurs null par "" pour les string par exemple.

Discussions similaires

  1. [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
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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