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 :

Collection qui se vide sans raison ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut Collection qui se vide sans raison ?
    Bonjour
    Tout d'abord voici mon code

    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
    29
     
    public partial class f_clients_list : Form
        {
            List<clients> maListe = new List<clients>();
            public List<clients> mesClients;
            clients unClient;
            public f_clients_list(SqlConnection m_connection)
            {
                InitializeComponent();
     
                List<clients> mesClients = clients.affecter(m_connection);
     
                foreach (clients unClient in mesClients)
                {
                    MessageBox.Show(mesClients[0].ClientNum.ToString());
                    client_data_grid.Rows.Add(unClient.ClientNum, unClient.ClientNom, unClient.ClientPrenom);
                }
     
            }
     
            private void client_data_grid_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                // On "Instancie" l'objet de la collection pour le transmettre //
     
                unClient  = mesClients[System.Convert.ToInt16(client_data_grid.CurrentRow.Cells[0].Value) - 1];
                f_clients frmClient = new f_clients(unClient);
                frmClient.Show();
            }
        }
    Si vous avez compris, j'ai une collection "Mes clients" qui possède une liste d'objet clients.

    Le problème c'est qu'une fois que j'ajoute l'objet dans mon dataGrid, je veux récupérer l'objet en question de la collection quand je clique sur une ligne.
    J'arrive donc a récupérer le numero de la première colonne, cependant , comme je suis plus dans le meme évenement, la collection mesClients est totalement vide ! Par conséquent je ne peux récupérer un objet en fonction de son index vue qu'il n'y a rien dans la collection.
    Je voudrais savoir donc, pourquoi la collection mesClients se vide ?

    Merci d'avance de votre réponse, et que faire pour obtenir ce que je souhaite ?

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Avant de te donner des éléments de réponse, j'aimerai que tu me dises ce que fais :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    List<clients> mesClients = clients.affecter(m_connection);

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Avant de te donner des éléments de réponse, j'aimerai que tu me dises ce que fais :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    List<clients> mesClients = clients.affecter(m_connection);
    j'allais le demander...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    Et sinon ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    mesClients = clients.affecter(m_connection);

    au lieu de ça:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    List<clients> mesClients = clients.affecter(m_connection);

    ???

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Pourquoi ne pas affecter ton objet client au Tag de ta DataGridViewRow ?

    Lors de l'event CellDoubleClick, tu n'as qu'a faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     if (e.RowIndex > -1 && e.ColumnIndex > -1)
     {
            if(client_data_grid.Rows[e.RowIndex].Tag != null)
            {
                    clients unClient  = (clients)client_data_grid.Rows[e.RowIndex].Tag;
             }
     
    }

  6. #6
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    toujours pas compris ???

    en redéfinissant ta variable mesclients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<clients> mesClients = clients.affecter(m_connection);
    dans le constructeur, tu en changes la portée. Sorti du constructeur, ton objet est null...

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public partial class f_clients_list : Form
        {
            List<clients> maListe = new List<clients>();
            public List<clients> mesClients = null;
            clients unClient;
            public f_clients_list(SqlConnection m_connection)
            {
                InitializeComponent();
     
                List<clients> mesClients = clients.affecter(m_connection);
    [...]
    m'enfin, c'est la base ça... Maintenant, le nez dans le guidon, je peux comprendre que ça ne saute pas aux yeux...

    P.S. : oops... Nejnej avait déjà répondu...

  7. #7
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Si j'ai posé une question plutôt que de répondre directement, c'était pour qu'il se rende compte lui même de son erreur, tant pis !

    D'une manière générale, le code est plutôt mal conçu, c'est de la programmation à la "va comme j'te pousse" comme on en voit souvent en PHP, sans offenses, on fait tous ça quand on débute, et on apprend par l'erreur !

    En principe, ton "client" n'a aucune raison d'être un attribut, et ta liste de clients devrait être une propriété.
    Tu devrais plutôt avoir quelque chose comme ça :

    Code c# : 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
     
            public List<Client> ListeClient
            {
                get
                {
                    if (_listeClient == null)
                    {
                        _listeClient = new List<Client>();
                    }
                    return _listeClient;
                }
                set
                {
                    _listeClient = value;
                }
            }
            private List<Client> _listeClient;

    Et pour ton ajout à ta liste :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public Client GetCustomerInfo(object sender, DataGridViewCellEventArgs e)
            {
                try {
                      return from c in ListeClient where c.CustomerID == CustomerDataGrid.CurrentRow.Cells[0].Value select c ;
                }
                catch(Exception e) {
                      // Tu peux logger une erreur, la jeter, la taire...
                }
            }

  8. #8
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    tout à fait d'accord... J'avais initialement fait la même remaque sur la redéclaration...

    Par contre je préfère retourner null plutôt que d'instancier et retourner vide... ensute il faut gérer le null...

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 12/06/2010, 00h21
  2. Socket qui se ferme sans raison
    Par rXpCH dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 10/07/2009, 13h54
  3. Job sql qui se désactive sans raison
    Par panif dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/05/2008, 15h10
  4. [MySQL] Un if qui passe à else sans raison
    Par SnoT- dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/01/2008, 14h06
  5. fenêtre qui s'élargit sans raison apparente
    Par Lcf.vs dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 24/11/2007, 23h02

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