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

ASP.NET Discussion :

Manipulation des jours dans un Calendar


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Manipulation des jours dans un Calendar
    Bonjour tout le monde.

    J'ai une question sur la contrôle Calendar : je voudrais pouvoir mettre du texte en dessous de certains jours.

    Et je cherche sur le net, dans la MSDN comment faire, mais je trouve pas. Là, pour l'isntant, je poursuis une piste qui passe par le DayRender, mais ça m'a l'air un peu scabreux.

    Auriez vous une meilleure piste ?

  2. #2
    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 : 43
    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
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Là, pour l'isntant, je poursuis une piste qui passe par le DayRender, mais ça m'a l'air un peu scabreux.
    Ca me semble pourtant assez adapté...
    Regarde l'exemple dans la doc de DayRender, justement ils ajoutent un texte :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
             ' Add custom text to cell in the Calendar control.
             If e.Day.Date.Day = 18 Then
                e.Cell.Controls.Add(New LiteralControl("<br />Holiday"))
             End If

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    Qaund j'ai dit "scabreux" j'ai pas dis indapaté. Efectivement, à priori, ça me semble être le seul chemin à suivre.

    J'ai bien compris le principe d'ajout de contrôle directement dans la cellule.

    Maintenant, un autre point où j'ai un peu de mal : dans l'exemple on texte si le jour est le numéro 18, ça m'a l'air simple. Mais dans mon cas j'ai un truc un poil différent. Je vais remonter une liste de date depuis la base de donnée et je ne vois pas trés bien comment lui injecter cette lsite de date pour qu'il ajoute le texte dans chacune des cases. Ma Table fera deux champs : une date et un texte.

    Je vois bien faire un For Each pour lire la Table (qui sera sous forme de DAtaTable) mais j'ai plus de mal avec le test à effetuer.

    Tu aurais une idée ?

  4. #4
    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 : 43
    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
    Par défaut
    Le plus simple c'est d'extraire de ta base une List(Of DateTime), et d'utiliser la méthode Contains...

    Dans la classe :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Private _dates As List(Of DateTime)

    Dans le Load :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' Charge les données de la base
    Dim dtDates As DataTable = ...
     
    ' Extrait les dates
    Dim q =
        From row In dtDates.AsEnumerable()
        Select CType(row("LaColonneAvecLaDate"), DateTime)
    _dates = q.ToList()


    Et dans le DayRender :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If _dates.Contains(e.Day.Date) Then
        ...

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    hop, hop, hop, on va trop vite la Monsieur tomlev.

    On voudrait me faire avaler du Linq sans avoir l'air ........

    Bon, ok, je pense pourvoir m'en sortir avec ton exemple de code.

    Mais j'ai nu souci quand même : depuis ma base je vais remonter une lsite de date avec un texte dans le champ d'à côté. Là, je vois pas bien comment je le colle ce champ (enfin, son contenu) ou alors y a un épisode que j'ai loupé.

    Tu vois ce que je vuex dire ?

  6. #6
    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 : 43
    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
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Mais j'ai nu souci quand même : depuis ma base je vais remonter une lsite de date avec un texte dans le champ d'à côté. Là, je vois pas bien comment je le colle ce champ (enfin, son contenu) ou alors y a un épisode que j'ai loupé.
    Ah ok... en fait j'avais extrait les dates de la DataTable pour que ce soit plus pratique à utiliser ensuite, mais effectivement s'il y une info associée à la date ça ne marche plus.

    Dans ce cas, garde la DataTable dans un champ de la table, et récupère le texte dans la table à partir de la date :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private _dtDates As DataTable
     
    Function GetTextForDate(ByVal dt As DateTime) As String
     
        Dim query =
            From row In _dtDates.AsEnumerable()
            Let rowDate = CType(row("LaColonneAvecLaDate"), DateTime)
            Where rowDate = dt
            Select CType(row("LaColonneAvecLeTexte"), String)
     
        Return query.FirstOrDefault()
     
    End Function

    Et dans le DayRender :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim dateText As String = GetTextForDate(e.Day.Date)
    If Not dateText Is Nothing Then
        ...

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon, j'ai tenté d'implémenter ton idée, mais il doit me manquer des choses pour metre en place le Linq.

    mon code bloque sur la ligne du Dim q = en me disnat qu'il lui manque une expression.

    J'ai ajouté un imports tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Linq.Expressions
    Mais visiblement, cela ne lui suffit pas.

    Une idée ?

  8. #8
    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 : 43
    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
    Par défaut
    Non c'est pas System.Linq.Expressions qu'il te manque

    Il te faut a priori 2 Imports :
    - System.Linq
    - System.Data

    Et une référence qui n'est sans doute pas ajoutée par défaut :
    - System.Data.DataSetExtensions.dll

    (c'est ce qui permet de faire du Linq sur une DataTable)

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok, merci pour l'info.
    J'ai donc ajouté les deux imports et la réfrence dans mon web.config.
    Mais ça ne change pas.

    Dés que je tape un il me lance une erreur.

    J'ai recompilé le projet, refermé VS et relancé. J'ai relancé mon ISS aussi.

    Je sèche.

  10. #10
    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 : 43
    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
    Par défaut
    Citation Envoyé par zooffy Voir le message
    J'ai donc ajouté les deux imports et la réfrence dans mon web.config.
    Bah c'est plutôt au niveau du projet qu'il faut rajouter la référence... (clic droit, ajouter une référence)

  11. #11
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Oui, c'est ce que j'ai fait et il me l'a collée direct dans le web.config.

    Mais toujours rien. Et j'ai bien toutes les dll du Linq, je l'ai installé sur ma machine il y a plusiuers mois déjà.

  12. #12
    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 : 43
    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
    Par défaut
    Ah, ce serait pas tout simplement parce qu'il manque les "_" pour dire que tu continues sur la ligne suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim query = _
            From row In _dtDates.AsEnumerable() _
            Let rowDate = CType(row("LaColonneAvecLaDate"), DateTime) _
            Where rowDate = dt _
            Select CType(row("LaColonneAvecLeTexte"), String)
    Il me semble que c'est pas nécessaire dans une requête Linq, mais c'est sans doute nécessaire après le "="...

  13. #13
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Effectivement avec les _ ça marche mieux.

    Merci pour tout Tomlev.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2007, 17h13
  2. manipuler des checkbox dans un gridview
    Par intissar_g dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/05/2007, 08h23
  3. Design des jours d'un Calendar
    Par Azephel dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/04/2007, 21h16
  4. Manipuler des chaînes dans un tableau
    Par cirtey dans le forum C
    Réponses: 5
    Dernier message: 01/03/2007, 22h08
  5. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40

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