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 :

Datagridview et objet non défini


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Datagridview et objet non défini
    Bonjour,

    j'ai développé un programme avec Visual Studio 2010 en WinForm.

    Dans ce programme avec l'interface je rajoute un DataGridView (que je renomme). Via la fenêtre de propriété je renseigne le champ "DataSource" en le faisant correspondre avec un objet que j'ai créé avec tout plein de propriétés.
    Puis je vais dans le champ "Columns" pour renommer proprement mes colonnes de mon DataGridView.

    Enfin dans mon code je construit tous mes objets que je stocke dans une List<monobjet>.

    Jusqu'ici pas de soucis.
    Mais au moment de mettre ma List dans mon DataGridView j'ai une exception fatale... pim pam poum badaboum...
    La référence d'objet n'est pas définie à une instance d'un objet.

    (merci le déboggeur Visual Studio).

    Du coup, je regarde ce que contient mon DataGridView est il est à NULL.
    Voici le morceau de code où ça pète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv_ResultSearchProcs.DataSource = _listeSearchProcs;
    Et mon dgv_ResultSearchProcs est à NULL, tandis que _listeSearchProcs contient bien tous les objets comme il faut.

    Là où je suis étonné c'est que j'ai déjà fait des trucs de ce genre et j'ai jamais eu de soucis et le code marche parfaitement sur d'autres projets.
    Normalement ce n'est pas au logiciel de s'occuper d'initialiser le DataGridView et compagnie quand je le rajoute via l'interface dans le InitializeComponent ?

    J'ai jeté un coup d'oeil dans le InitializeComponent et tout me parait bon... (je me suis amusé à comparer une version du logiciel qui fonctionnait avec celle qui fonctionnait pas)

    Ca fait 3h que je suis dessus je commence à m'agacer du coup je viens vous demander de l'aide. Un oeil extérieur est toujours plus efficace que le sien...

    Bien sur si il y a besoin de plus de code ou d'informations n'hésitez pas.

    Merci beaucoup pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Bonjour,

    Normalement, lorsque les éléments sont créés via le designer, l'instanciation ce fait de manière automatique, en générant le code comme il faut dans InitializeComponent (comme tu l'as très bien souligné ).

    Maintenant, il faudrait avoir plus de détail. Le code de ton formulaire ou du contrôle utilisateur que tu définis.

    A l'aveugle, je dirais que tu essaies d'initialiser ton DataGridView dans le constructeur de ton formulaire, et avant l'appel de InitializeComponent (ou que cet appel est carrément manquant!)

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Je dirais que tu as écris cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv_ResultSearchProcs.DataSource = _listeSearchProcs;
    dans le constructeur de ta form juste avant le initialisecomponents. Donc c'est normal. Si tu mets cette ligne après le initialisecomponents, ce sera bon

    Si c'est pas ça, il faut nous envoyer du code...

    [EDIT] : Grillé
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  4. #4
    Invité
    Invité(e)
    Par défaut
    merci pour vos réponses et voici plus de détails au niveau de mon code.

    En tout premier j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    Puis l’évènement au clic de mon bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     /// <summary>
            /// Lorsque l'on cliquer sur le bouton "Rechercher les procs
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_SearchProcs_Click(object sender, EventArgs e)
            {}
    j'ai enlevé le code de l'événement pour pas que ça fasse trop. Dans cette méthode j'en déclenche une autre qui va s'occuper de renseigner mon DataGridView : LoadSearchProcs();

    La voici :
    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
     
    private void LoadSearchProcs()
            {
    while (_dtrProcs.Read())
                    {
                        SearchProcs _sp = new SearchProcs();
     
                        _sp.NomProc = _dtrProcs["nom_proc"].ToString();
                        if (int.TryParse(_dtrProcs["descid_chp_declenche"].ToString(), out _descidDeclenche))
                            _sp.DescidChpDeclenche = _descidDeclenche;
                        _sp.NomChpDeclenche = _dtrProcs["nom_chp_declenche"].ToString();
                        _sp.SqlChpDeclenche = _dtrProcs["sql_chp_declenche"].ToString();
                        _sp.FormuleBas = _dtrProcs["formule_bas"].ToString();
                        if (int.TryParse(_dtrProcs["descid_chp_declencheur"].ToString(), out _descidDeclencheur))
                            _sp.DescidChpDeclencheur = _descidDeclencheur;
                        _sp.NomChpDeclencheur = _dtrProcs["nom_chp_declencheur"].ToString();
                        _sp.SqlChpDeclencheur = _dtrProcs["sql_chp_declencheur"].ToString();
                        _sp.ContenuProc = _dtrProcs["contenu_proc"].ToString();
     
                        _listeSearchProcs.Add(_sp);
                    }
     
                    //j'affiche dans mon gridview
                    dgv_ResultSearchProcs.DataSource = _listeSearchProcs;
    }
    et donc l'erreur est à la fin après le commentaire "j'affiche dans mon gridview".

  5. #5
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    D'un rapide coup d'oeil, je ne vois rien qui me choque.

    Question subsidiaire : tu ne nous fais pas la blague d'assigner une nouvelle valeur à ton datagridview quelque part dans ton code (et je dirais au hasard : null ? )

  6. #6
    Invité
    Invité(e)
    Par défaut
    euh....

    alors j'avais mis des :
    datagrid.datasource = null;

    à certains endroits notamment dans les catch en cas d'erreur...
    J'ai mis toutes ces lignes en commentaire et maintenant cela fonctionne... Mais cela fait planter d'autres fonctionnalités mais c'est pas le sujet...

    Du coup, c'est quoi le morceau de code magique pour vider ma datasource afin d'en réassigner une autre...
    Exemple, je charge ma datasource tout bien. Après je clique sur le nom d'une colonne pour trier. Du coup, je voudrais vider le datasource pour lui remettre avec les valeurs triées.

    En tout cas merci beaucoup même si je comprends pas pourquoi la première version fonctionnait et pas la nouvelle.

    EDIT :

    Pour essayer de comprendre. Je reviens sur mon tri.
    Je charge mon datagridview comme expliqué plus haut.
    Quand je clique sur l'entête d'une colonne je déclenche une méthode qui va récupérer ma liste d'objet, les trier et afin de les remettre dans mon datagridview je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dgv_ResultEudoChamps.DataSource = null;
                        dgv_ResultEudoChamps.DataSource = _listeChampsEudo;
    et là ça marche parfaitement...
    Alors pourquoi "dgv_ResultEudoChamps.DataSource = null;" j'avais ce problème avant ?

  7. #7
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Au vue de l'erreur que tu avais, tu avais très certainement écrit un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv_ResultEudoChamps = null;
    en voulant écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv_ResultEudoChamps.DataSource = null;
    C'est pourquoi lorsque tu essayais de réaffecter un DataSource à ta GridView tu avais une exception, car tu avais mis à null ta GridView et non le DataSource de la GridView...

  8. #8
    Invité
    Invité(e)
    Par défaut
    grillé

    oui je viens de m'en rendre compte en faisant des tests et en mettant mes lunettes

    c'est exactement ce que je faisais !

    En tout cas merci beaucoup pour votre aide et désolé pour le dérangement pour si peu

Discussions similaires

  1. Référence d'objet non définie
    Par Perceuse-Killer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/06/2008, 19h11
  2. Erreur 91 variable objet non définie
    Par kmarcel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2008, 13h17
  3. Erreur 91 variable objet non défini
    Par sebeni dans le forum Général VBA
    Réponses: 3
    Dernier message: 07/05/2007, 11h12
  4. [VBA]ActiveX : objet non défini
    Par gust dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/03/2007, 12h43
  5. Réponses: 4
    Dernier message: 16/06/2006, 00h27

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