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 :

Drôle de comportement entre Nullable et Binding


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut Drôle de comportement entre Nullable et Binding
    Bonjour,

    Après m'être posé bien des questions, j'ai finis par trouver pourquoi mon programme faisait n'importe quoi hier. Mais même si j'ai trouvé le pourquoi, je n'ai aucune solution à y appliquer. Vous allez peut-être pouvoir m'aider.

    J'ai une classe avec 3 propriétés de type Int16.
    Je crée un formulaire avec 3 checkbox et je bind chaque propriété sur celles-ci.
    A l'exécution, tout se passe bien.

    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
        public partial class Form1 : Form
        {
     
            Test test = new Test();
     
            public Form1()
            {
                InitializeComponent();
                checkBox1.DataBindings.Add(new Binding("Checked", test, "P1"));
                checkBox2.DataBindings.Add(new Binding("Checked", test, "P2"));
                checkBox3.DataBindings.Add(new Binding("Checked", test, "P3"));
            }
     
        }
     
        class Test
        {
            private System.Int16 _P1;
            private System.Int16 _P2;
            private System.Int16 _P3;
     
            public System.Int16 P1 
            {
                get { return _P1;}
                set { _P1 = value; } 
            }
     
            public System.Int16 P2
            {
                get { return _P2;}
                set { _P2 = value; } 
            }
     
            public System.Int16 P3
            {
                get { return _P3; }
                set { _P3 = value; }
            }
     
        }
    Jusque là, pas de souci me direz-vous !

    Là où ça se complique, c'est si j'utilise les Nullable.

    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
     
         class Test
        {
            private Nullable<System.Int16> _P1;
            private Nullable<System.Int16> _P2;
            private Nullable<System.Int16> _P3;
     
            public Nullable<System.Int16> P1 
            {
                get { return _P1;}
                set { _P1 = value; } 
            }
     
            public Nullable<System.Int16> P2
            {
                get { return _P2;}
                set { _P2 = value; } 
            }
     
            public Nullable<System.Int16> P3
            {
                get { return _P3; }
                set { _P3 = value; }
            }
     
            public Test()
            {
                P1 = 0;
                P2 = 0;
                P3 = 0;
            }
        }
    Là, sur l'interface, ça fait n'importe quoi. Quand je coche une case, ça en décoche une autre et inversement. On dirait que le programme se comporte comme s'il était impossible d'avoir toutes les checkbox cochées ou décochées en même temps.

    En quoi Nullable peut-il influencer ce comportement ?

    Papy !

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Pourquoi tu bindes un entier à une checkbox, alors que les checkbox portent une info binaire (coché / pas coché) ?

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Parce que cette classe est une "interface" pour une table dans une base de données utilisée par NHibernate et qu'il semble que NHibernate gère les booléens sous forme de Int16 (Sans doute pour éviter les problèmes avec les SGBD qui ne gère pas les booléens).

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Parce que cette classe est une "interface" pour une table dans une base de données utilisée par NHibernate et qu'il semble que NHibernate gère les booléens sous forme de Int16 (Sans doute pour éviter les problèmes avec les SGBD qui ne gère pas les booléens).
    Ok ok. Mais alors pourquoi utiliser des nullable ? Je suppose que nHibernate fait correspondre 0 à false et tout le reste à true ?

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    J'ai enlevé les Nullable dans ma classe et ça fonctionne mais je voudrais tout de même bien savoir pourquoi ça "merdouille" si on les utilise avec le Binding :-)

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Le binding est puissant, mais il va pas deviner comment attacher une propriété "short?" à un "bool", hein Il n'y a pas de conversion triviale entre ces deux types.

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

Discussions similaires

  1. drôle de comportement avec un server sqlserver
    Par zoltix dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 09/05/2008, 13h17
  2. différence de comportements entre JVM
    Par Nicaisse dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 30/08/2007, 11h41
  3. Réponses: 2
    Dernier message: 20/06/2007, 10h27
  4. Réponses: 5
    Dernier message: 10/04/2007, 09h37
  5. [JavaScript] Différence de comportement entre IE et FF
    Par YAMKI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/02/2007, 14h33

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