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 :

DataGridViewComboCell is not Valid


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut DataGridViewComboCell is not Valid
    Bonjour

    Je cherche l'origine d'un probleme qui se produit dans un DataGridViewComboBoxColumn sous certaines condition

    1- J'ai deux DataGridViewComboBoxColumn bindés sur deux DataView différent !!

    Ces combos sont Pays et Regions

    2- Au départ ces combos affichent des cellules vides
    3- Je selectionne un pays dans Pays : tout va bien

    J'intercepte l'event de modification de mon combo de la maniere montrée dans le code ci apres
    Lors de la selection d'un pays, je change le filtre du DataView des régions pour ne plus afficher que les régions du pays.

    Au premier coup ca va bien, je peux selectionner les regions
    Si apres je change de pays, au moment je passe la souris sur le combo des Regions, je ramasse une bordée d'erreurs DataGridViewComboCell is not Valid avant que tout se stabilise

    Je suppose que je devrais faire un refresh ou un rebinding quelque part mais je ne vois pas vraiment quoi ?

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    bool noEvent=false;
    // ***********************************************************************************
        private void dgv1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
          if (noEvent)
          {
            return;
          }
     
          ComboBox combo = e.Control as ComboBox;
          if (combo != null)
          {
            // Remove an existing event-handler, if present, to avoid 
            // adding multiple handlers when the editing control is reused.
            combo.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
     
            // Add the event handler. 
            combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
          }
        }
     
        // ***********************************************************************************
        private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
          noEvent = true;
          ComboBox combo = (ComboBox)sender;
     
          if (combo.SelectedItem == null)
          {
            return;
          }
     
          DataRowView cRowV = (DataRowView)combo.SelectedItem;
          DataRow cRow = cRowV.Row;
     
          if (combo.DisplayMember == "Pays")
          {
            curPays = cRow["Pays"].ToString();
            curPaysID = cRow["PaysID"].ToString();
            string s = string.Format("PaysID='{0}'", curPaysID);
            dvRegion.RowFilter = "";
            dvRegion.RowFilter = s;
            noEvent = false;
            return;
          }
          if (combo.DisplayMember == "Region")
          {
            curReg = cRow["Region"].ToString();
            return;
          }
        }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Bon j'ai réussi a contourner intuitivement le bazar, mais sans bien comprendre le mecanisme d'erreur

    J'ai résolu en mettant Empty Cell.Value de la colonne dont je changeais le Filtre !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    il faudrait regarder le détail de l'exception (stacktrace, innerexception...) pour en savoir plus...

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    il faudrait regarder le détail de l'exception (stacktrace, innerexception...) pour en savoir plus...
    Tous les deux = null

    Je catch l'exception dans le DGV_DataError !!

    A mon avis c'est parce que la cellule du DGV contient une valeur et que celle ci n'appartient pas au DataView Source que je viens de filtrer

    Mais c'est spéculatif !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par olibara Voir le message
    Tous les deux = null
    La StackTrace est null ??? j'ai jamais vu ça

    Citation Envoyé par olibara Voir le message
    A mon avis c'est parce que la cellule du DGV contient une valeur et que celle ci n'appartient pas au DataView Source que je viens de filtrer

    Mais c'est spéculatif !
    Possible...

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    La StackTrace est null ??? j'ai jamais vu ça
    Si si en tout ca celle que je peux voir dans l'event de l'error

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        private void DgvKeys_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
          //ComboBox combo = (ComboBox)sender;
          int y = 5;
        }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Citation:
    Envoyé par olibara
    A mon avis c'est parce que la cellule du DGV contient une valeur et que celle ci n'appartient pas au DataView Source que je viens de filtrer

    Mais c'est spéculatif !
    Possible...
    Et c'est on ne peut plus logique !

Discussions similaires

  1. [C#]Cross-thread operation not valid
    Par hrp dans le forum Windows Forms
    Réponses: 17
    Dernier message: 31/07/2007, 16h36
  2. Réponses: 3
    Dernier message: 25/09/2006, 15h48
  3. Erreur "specified cast is not valid"
    Par [DreaMs] dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 30/01/2006, 21h15
  4. [VB.Net][VS2005] "Statement is not valid in a name spac
    Par Irlandais dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/12/2005, 09h35
  5. xhtml ->xml xsl:attribute name+not valid
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 14/06/2005, 07h27

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