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 :

DropDownList de dates


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 254
    Par défaut DropDownList de dates
    Bonjour,

    Je dois construire une combo box avec les dates des 7 derniers jours. J'aimerais voir affiché dans ma DropdownList la date sous forme "DD/MM/YYYY". J'ai donc créé une liste de dates

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DateTime date = DateTime.Now;
    List<DateTime> dates = new List<DateTime>();
     
    for (int i = 0; i < HISTORY_LENGTH; i++)
    {
        dates.Add(date.AddDays(-i));
    }
     
    DropDownList.DataSource = dates;
    DropDownList.DataBind();

    L'affichage se fait correctement mais sous la forme

    [0]: {16/07/2008 11:08:27}
    [1]: {15/07/2008 11:08:27}
    [2]: {14/07/2008 11:08:27}
    [3]: {13/07/2008 11:08:27}
    [4]: {12/07/2008 11:08:27}
    [5]: {11/07/2008 11:08:27}
    [6]: {10/07/2008 11:08:27}
    Comment puis je forcer l'affichage sous la forme de "DD/MM/YYYY" ?

    Ce sujet m'a aidé : http://www.developpez.net/forums/sho...d.php?t=147410

    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    réponse :

    En utilisant la methode : ToString(format), qui te permet de définir le format d'affichage ....

    The Monz, Toulouse

  3. #3
    Membre éprouvé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Par défaut
    Bonjour,

    Tu peux aussi utiliser .ToShortDateString() qui existe sur les objets de type DateTime

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 254
    Par défaut
    J'ajoute mes dates en tant que DateTime à ma DropDownBox et non en tant que strings. C'est la méthode .ToString() de mon objet DateTime qui est appellée pour créer le texte qui est visible dans ma DropDownBox. Pas défaut c'est la date et l'heure.

    Je voudrais que seule la date soie affichée. Je vois deux solutions

    1. Créer mon objet DateTime en redéfinissant (overiding) la méthode .ToString().
    2. Trouver un autre moyen de redéfnir ce qui doit être affiché. Avec la propriété DataTextFormatString par exemple ou en définissant le DataTextField.

    Dans tout les cas je ne désir pas mettre directement des string dans ma DropDownBox. Cela m'obligerais à convertir ces strings en date à un moment donné. Je trouve pas ca propre .

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Et si tu positionnais simplement le .DisplayMember = "date" ?

    C'est une subtilité malconnue du combo lorsque les items sont des objets, on peut définir le valuemember et le displaymember avec l'une des propriétés de ces objets.

    Dans l'item, tu as bien un DateTime et à l'affichage, tu n'as que le jour.

    Exemple en VB.Net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            Dim ddate As DateTime = DateTime.Now
            Dim ldates As List(Of DateTime) = New List(Of DateTime)
     
            Dim i As Integer
            For i = 0 To 7
                ldates.Add(ddate.AddDays(-i))
            Next
     
            Me.ComboBox1.DataSource = ldates
            Me.ComboBox1.DisplayMember = "date"
    Cdt.

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 254
    Par défaut
    Merci pour l'astuce olsimare. Le résultat n'est pas tout à fait ce que je cherche à faire mais "Me.ComboBox1.DisplayMember = "date"" à indéniablement un effet sur mon affichage. L'heure s'affiche toujours mais est à "0:00:00". C'est définitivement dans cette voie qu'il faut que je cherche.

    Mon code donne maintenant ceci :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DateTime date = DateTime.Now;
    List<DateTime> dates = new List<DateTime>();
     
    for (int i = 0; i < HISTORY_LENGTH; i++)
    {
        dates.Add(date.AddDays(-i));
    }
     
    DropDownList.DataSource = dates;
    DropDownList.DataTextField = "date";
    DropDownList.DataBind();

    Et affiche

    [0]: {16/07/2008 0:00:00}
    [1]: {15/07/2008 0:00:00}
    [2]: {14/07/2008 0:00:00}
    [3]: {13/07/2008 0:00:00}
    [4]: {12/07/2008 0:00:00}
    [5]: {11/07/2008 0:00:00}
    [6]: {10/07/2008 0:00:00}
    Ca avance . Pour la suite je crois que je vais pouvoir me débrouiller tout seul à moins que vous ayez une nouvelle astuce. Si je trouve quelque chose je viendrai ajouter l'information sous ce message. J'ai tout de même encore quelques questions si vous avez un peu de temps.

    1. Est ce bien la méthode ToString() qui définit l'affichage du texte dans la DropDownBox ?
    2. Lorsque j'exécute le DataBind() que se passe t'il exactement ? J'ai tendance à croire que c'est à ce moment que le composant fait appel à ToString() pour créer un nouvel objet de type ListItem. Je perd donc mon objet DateTime.
    3. J'ai aussi remarqué que DateTime est une struct, pas une classe. Qu'est ce que cela implique ?
    4. A quoi on pensé les développeurs quand ils ont créé DateTime ? Je peux même pas hériter et améliorer ses propriété ni redéfinir son affichage, rien. Est ce moi qui comprend rien ?


    Merci pour votre temps ++

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

Discussions similaires

  1. QueryExtender sur une DropDownList de date
    Par Isher dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/02/2011, 14h35
  2. Réponses: 11
    Dernier message: 23/07/2002, 14h33
  3. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21
  4. Réponses: 3
    Dernier message: 06/05/2002, 18h24
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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