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

Silverlight Discussion :

La référence d'objet n'est pas définie à une instance d'un objet.


Sujet :

Silverlight

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut La référence d'objet n'est pas définie à une instance d'un objet.
    Bonjour,
    je veux sélectionner toutes les lignes de mon Datagrid , une fois je clique sur mon bouton toutes les lignes que j'ai dans mon Datagrid soient sélectionnées
    voici le code de mon bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       private void Ajouter_tt(object sender, RoutedEventArgs e)
            {
     
                foreach (PartenaireResume  p in theDataGrid.ItemsSource)
                {
     
                    CheckBox Check = sender as CheckBox;
                     Check.IsChecked = true;
                }
           }
    j'ai l'erreur suivante :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Merci de m'aider

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Tu pourrais peut être préciser sur quelle ligne tu lève l'exception ou est ce trop te demander ??

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A priori c'est sender as CheckBox; qui renvoie null, parce que sender ne doit pas être une CheckBox... Cette méthode gère quel évènement de quel contrôle ?

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    il s'agit d'un bouton , sur lequel je dois cliquer pour selectionner tous les chekbox de ma datagrid

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    j'ai changé
    CheckBox Check = sender as CheckBox;par CheckBox Check = theDataGrid.Columns[0].GetCellContent(e) as CheckBox;puisque dans ma datagrid la prenmière colonne contient le checkbox

    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
     private void Ajouter_tt(object sender, RoutedEventArgs e)
            {
                try
                {
                    CheckBox Check = theDataGrid.Columns[0].GetCellContent(e) as CheckBox;
                    Check.IsChecked = false;
                    foreach (PartenaireResume p in theDataGrid.SelectedItems)
                    {
                        Check.IsChecked = true;
     
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.InnerException.ToString());
                    MessageBox.Show(ex.StackTrace);
                }
     
            }
    ça donne toujours la meme erreur

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Je réitére ma question : quelle ligne lève l'exception ?

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    voici la trace de l'exception :
    La référence d'objet n'est pas définie à une instance d'un objet.

    à NavigationApp.Partenaire.Ajouter_tt(Object sender, RoutedEventArgs e)
    à System.Windows.Controls.Primitives.ButtonBase.OnClick()
    à System.Windows.Controls.Button.OnClick()
    à System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
    à System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
    à MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    On ne demande pas la pile de l'exception (dans certain cas c'est utile, mais pas ici) mais la ligne qui la lève dans ton block.

    Pour cela :

    déroule pas à pas sous débugger et regarde quel ligne lève l'exception

    OU

    supprime ton exception handler (block try/catch) et attend que ça plante (VS te positionnera sur la ligne)

    OU

    précise dans le menu exception handling de lever l'exception même si elle est catchée.

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    ça bloque sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckBox Check = theDataGrid.Columns[0].GetCellContent(theDataGrid.SelectedItem) as CheckBox;
    quand il y arrive ça passe plus

  10. #10
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    quand j'ai enlevé le try/catch ça donne une erreur du type :
    La valeur ne peut pas être null.Nom du paramètre*: dataItem
    et ça bloque sue cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckBox Check = theDataGrid.Columns[0].GetCellContent(theDataGrid.SelectedItem) as CheckBox;

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Voilà qui est plus clair !

    Verifier que theDataGrid.SelectedItem n'est pas null.

  12. #12
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    je pense qu'elle n'est pas vide , parce que quand j'ai essayé d'affichier le contenu avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MessageBox.Show(theDataGrid.SelectedItem.ToString());
    ça me donne une chaine

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par israe2010 Voir le message
    il s'agit d'un bouton , sur lequel je dois cliquer pour selectionner tous les chekbox de ma datagrid
    OK, là on comprend mieux ce que tu veux faire...

    Qu'est-ce que tu utilises comme ItemsSource pour ton DataGrid ? Une collection d'objets ? Une DataTable ?
    En général on ne manipule pas directement les cellules d'un DataGrid en Silverlight, on modifie les objets sur lesquels le DataGrid est bindé. Est-ce que ta colonne avec les CheckBox est bindée sur une propriété de l'objet affiché ?

  14. #14
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    En ce qui concerne les Itemsource de mon Datagrid , il s'agit d'une liste d'objets voici sa déclaration .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<PartenaireResumeCritere> partenaireData = new List<PartenaireResumeCritere>();
    pour le binding je l'ai fait comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsChecked="{Binding Check}"
    est ce correct ? je n'ai jamais travaillé avec silverlight.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK, dans ce cas c'est tout simple. Tout ce que tu as à faire, c'est parcourir la collection d'origine et mettre la propriété Check à true :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(var partenaire in partenaireData)
    {
        partenaire.Check = true;
    }
    Soit dit en passant, tu devrais utiliser une ObservableCollection<T> plutôt qu'une List<T>. Ca permettra que le DataGrid se mette à jour automatiquement si tu ajoutes ou enlèves un élément de la liste.

  16. #16
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    j'ai essayé avec le bout de code que vous m'avez donné:
    il me donne pas la main pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    partenaire.Check = true;
    je l'ai changé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    partenaire.IsSelected = true;
    et quand je clique sur le bouton , rien ne change , aucun checkbox ne se selctionne

  17. #17
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    quand j'ai testé avec des messagesbox , il entre pas dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach (var p in partenaireData)

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par israe2010 Voir le message
    il me donne pas la main pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    partenaire.Check = true;
    Je comprends pas ce que tu veux dire par "il me donne pas la main"...

    Citation Envoyé par israe2010 Voir le message
    je l'ai changé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    partenaire.IsSelected = true;
    et quand je clique sur le bouton , rien ne change , aucun checkbox ne se selctionne
    Bah la CheckBox est bindée sur Check, pas sur IsSelected...

    Est-ce que ta classe PartenaireResumeCritere implémente INotifyPropertyChanged ? Si ce n'est pas le cas le binding ne peut pas détecter que la propriété a changé, et ne peut donc pas se mettre à jour

  19. #19
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    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
    private void Ajouter_tt(object sender, RoutedEventArgs e)
        {
          try
          {
    if (theDataGrid == null || theDataGrid.ItemsSource == null) return;
            foreach (PartenaireResume p in theDataGrid.ItemsSource)
            {
              CheckBox chk = (CheckBox)theDataGrid.Columns[0].GetCellContent(theDataGrid.SelectedItem);
              if (!lstPartenaireResume.Contains(p))
              {
                chk = theDataGrid.Columns[0].GetCellContent(p) as CheckBox;
                chk.IsChecked = true;
              } 
     
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.InnerException.ToString());
            MessageBox.Show(ex.StackTrace);
        }
        }
    Le code ci-dessus arrive à selectionner les checkboxes, mais je suis obligée de cliquer dans une ligne de mon datagrid , puis cliquer sur le bouton Ajouter_tt pour que ca fonctionne .

    mais si je clique directement sur mon bouton ajouter_tt ca donne une erreur :
    La référence d'objet n'est pas définie à une instance d'un objet.
    l'erreur se produit sur cette ligne
    chk = theDataGrid.Columns[0].GetCellContent(p) as CheckBox;

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Désolé mais si tu tiens pas du tout compte de ce que je te dis, c'est pas la peine que je me fatigue à répondre...

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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