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 :

[C#] checkbox threestate


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut [C#] checkbox threestate
    Bonjour

    je developpe une appli en C# qui controle une BD SQL SERVER.

    dans ma fenetre C#, j'ai une checkbox representée par une variable de type BIT dans ma BD.

    Tout allait bien jusqu'a ce que j'ai besoin d'un 3eme état dans ma checkbox (undeterminate).

    Dans ma BD, j'ai autorisé la valeur NULL pour ma variable de type BIT.

    Mon probleme : dans mon code, je ne sais pas comment le gerer sachant que je ne peux pas affecter la valeur nulle à un booléen (ni meme un int).

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bool fak ;
    if (checkBox_FAK.CheckState == CheckState.Checked )
    	fak = true ;
    else 
    	if (checkBox_FAK.CheckState == CheckState.Unchecked )
    		fak = false ;
    	else
    		fak = DBNull.Value ;
    dataSetReglesOrdres1.REGLES_ORDRES.FindByid_regles_ordres(idOR).FaK = fak ;
    mais "fak = DBNull.Value" ne passe pas, ni "fak = null"

    Auriez-vous une solution ?

    merci

  2. #2
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut
    créer un type avec trois état...

    Parce que bool c'est 1 ou 0; blanc ou noir, ouvert ou fermé, ... Mais pas autrechose...

    Par contre si tu crées un type à trois états tu peux le caster en bool et renvoyer: true, false ou null...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2002
    Messages : 89
    Par défaut
    Ce genre de problème est résolu avec les types Nullable (grace a ça tu peux affecter la valeur Null à un booleen et a n'importe quel type)
    Quant a ta checkbox t'as qu'a la desactiver dans le cas ou il n'y a pas de réponse (null), ca te donne un troisème état et ca reste coherent

    Les types Nullables ont ete créé pour ca, ils répondent a la problematique des resultats indeterminés dans les bases de données. N'importe quel type suffixé d'un point d'interrogation devient Nullable. je te suggere de rechercher de la doc dessus pour découvrir leur manipulation.

  4. #4
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut
    ça marche en .net 1.1 ?

    Parce que j'avais jamais entendu parler de ça...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2002
    Messages : 89
    Par défaut
    Arg autant pour moi c'est une des nouveautés principales de .NET 2.0.

    Alors pour la checkbox ma réponse est toujours valide, pour ton etat je te suggere effectivement de faire une enum a trois etat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum ThreeStates { false, true, null };
    Et après tu fais un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ThreeStates State= ThreeStates.null;
    try
    {
    State= Enum.Parse(ThreeStates,TonBooleenDeTaBase);
    }
    catch(Exception e) {}

  6. #6
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Citation Envoyé par bootix
    Ce genre de problème est résolu avec les types Nullable (grace a ça tu peux affecter la valeur Null à un booleen et a n'importe quel type)
    Quant a ta checkbox t'as qu'a la desactiver dans le cas ou il n'y a pas de réponse (null), ca te donne un troisème état et ca reste coherent

    Les types Nullables ont ete créé pour ca, ils répondent a la problematique des resultats indeterminés dans les bases de données. N'importe quel type suffixé d'un point d'interrogation devient Nullable. je te suggere de rechercher de la doc dessus pour découvrir leur manipulation.

    .... mais les types Nullables ne sont apparues qu'avec DotNet 2.0 (C # 2.0). Or notre ami ne nous nu pas s'il est en 1.0 / 1.1 ou 2.0

    Donc si pas 2.0, alors créer son propre objet à trois etat c'est bien

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut
    merci je ne connaissais pas les types nullables
    c'est la 1ere fois que j'en entends parler

    je vais me renseigner

    je teste tout de suite bool?

    merci

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut
    je suis sur VS2003

    et il n'aime pas bool?

    Petite precision : je gere tres bien l'affichage de ma checkbox avec les 3 etats.
    Par contre, c'est au moment de sauvegarder la valeur dans la BD que je bloque.

    En fait, je garde le type BIT dans ma base pour voir apparaitre une checkbox dans mon Datagrid.
    Avec un int, je n'aurais pas de checkbox mais 0, 1, -1 par exemple.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut
    desolé, j'ai posté apres que tu ai repondu la 2eme fois.

    je teste tout de suite avec enum
    je pense que ca devrait marcher

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut
    le compilateur n'accepte pas les mot-clés true, false, null pour la declaration du type enuméré

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

Discussions similaires

  1. [JSP]checkbox
    Par orisis dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/04/2013, 13h53
  2. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44
  3. Checkbox
    Par rgarnier dans le forum XMLRAD
    Réponses: 11
    Dernier message: 06/03/2003, 10h48
  4. Couleur d'un CheckBox
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/07/2002, 14h48
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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