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 :

[DateTimePicker] propriété DataBindings et DateTime


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut [DateTimePicker] propriété DataBindings et DateTime
    Bonjour,

    J'essaie de me servir de la propriété "DataBindings" d'un DateTimePicker. J'ai un DateTime Nullable que j'essaie de rentrer dedans de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.dtp_heureRDV.DataBindings.Add("Value", this.demandeCourante, "DateHeureRendezVous");
    DateHeureRendezVous est donc une propriété, de type Nullable<DateTime>, de l'objet "demandeCourante".


    mais cela me soulève l'exception suivante:
    {"Impossible de mettre en forme la valeur avec le type souhaité."}
    StackTrace:
    à System.Windows.Forms.Binding.FormatObject(Object value)
    à System.Windows.Forms.Binding.PushData(Boolean force)
    à System.Windows.Forms.Binding.UpdateIsBinding()
    à System.Windows.Forms.Binding.CheckBinding()
    à System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
    à System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding)
    à System.Windows.Forms.BindingsCollection.Add(Binding binding)
    à System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding)
    à System.Windows.Forms.Control.UpdateBindings()
    à System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
    à System.Windows.Forms.Control.OnParentBindingContextChanged(EventArgs e)
    à System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
    J'ai beau chercher sur le net je ne trouve pas de piste pour m'aider...
    La MSDN m'indique un exemple, mais je fais pareil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* Bind the DateTimePicker control by adding a new Binding. 
       The data member of the DateTimePicker is specified by a 
       navigation path in the form: TableName.RelationName.ColumnName. */
       DateTimePicker1.DataBindings.Add(new 
       Binding("Value", ds, "customers.CustToOrders.OrderDate"));

    Quelqu'un a-t-il une idée qui pourrait me sortir de ce problème?

    Merci!

    Rastamath69

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

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Le problème est que le DateTimePicker accepte uniquement que les DateTime et non les Nullable<DateTime> (ou DateTime?), il faut modifier le comportement du DateTimePicker pour arriver à faire ce que tu souhaites.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Salut,

    Ok, je subodorais que la réponse allait être par là!!! :p

    Quand tu dis "modifier le comportement du DateTimePicker" cela veut dire qu'il y a une propriété à modifier? ou bien qu'il me faut recréer moi même un composant héritant du Dtp?

    Merci,

    Rastamath69

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

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Je dis qu'il faut hériter du DateTimerPicker pour modifier son comportement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    d'acc!
    Bon je vais plutôt faire un p'tit traitement pour binder un dateTime non null sur mon DTP et gérer les cas null à part!

    Merci de tes réponses!!

    @+

    Rastamath69

  6. #6
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Tu peux peut-être essayer ceci, sans trop de certitude, j'ai pas eu l'occasion de le tester

    Utiliser une des autres surcharges de la méthode Add qui prend dans ses paramètres un objet spécifiant la valeur à adopter en cas de valeur null (infos MSDN ici) et qui devrait (en gros) s'écrire dans ce style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.dtp_heureRDV.DataBindings.Add("Value", this.demandeCourante, "DateHeureRendezVous", false, DataSourceUpdateMode.OnValidation, DateTime.Now);
    À voir remplacer DateTime.Now par une valeur plus appropriée selon le contexte de ton appli (déjà si ça marche ) ; à voir aussi si jamais ça ne marche pas à mettre à "true" l'avant-dernier paramètre pour autoriser le formatage (je vois pas nécessairement une incidence mais sait-on jamais )

    Cordialement !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Effectivement!! Bien joué!

    Il m'a juste fallu indiquer que je souhaitais activer la mise en forme des données affichées, en mettant le 4ième paramètre à true comme ci-desous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.dtp_heureRDV.DataBindings.Add("Value", this.demandeCourante, "DateHeureRendezVous", true, DataSourceUpdateMode.OnValidation, new DateTime(1900, 01, 01));
    Je n'avais pas pensé à regarder du côté des surcharges de la méthode...

    Merci pour cette soluce, plus propre que de passer par une autre variable intermédiaire!

    Rastamath69

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

Discussions similaires

  1. DataBinding : depuis la propriété, retrouver le control.
    Par Totanne dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/03/2008, 21h17
  2. [Databinding] bind sur une propriété d'une collection
    Par herveb dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/12/2007, 10h35
  3. Réponses: 7
    Dernier message: 14/11/2007, 19h40
  4. Propriété de DateTimePicker
    Par 08353934 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/10/2007, 22h12
  5. dataBinding d'un dateTime ds 2 textBox
    Par pdesoil dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/03/2007, 16h40

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