Un calendrier plus ou moins abouti

Description

salut,
n'ayant pas trouvé de calendrier asp.net digne de ce nom, j'en ai préparé un, reste à le mettre en page à votre sauce.
pour passer au semestre suivant :
creationCalendrier(1);

Source / Exemple :


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        creationCalendrier(0);
        
    }
    string ferie(System.DateTime dateTraitee)
    {
        int year;
        int month;
        int day;
        year = dateTraitee.Year;
        month = dateTraitee.Month;
        day = dateTraitee.Day;
        //calcul du jour de paques
        int B;
        int D;
        int E;
        int Q;
        int monthPaques;
        int dayPaques;
        int monthLundiPaques;
        int dayLundiPaques;

        B = 225 - 11 * (year % 19);
        D = (B - 21) % 30 + 21;
        if (D > 48)
        {
            D = D - 1;
        }
        E = (year + (year / 4) + D + 1) % 7;
        Q = D + 7 - E;
        if (Q < 32)
        {
            monthPaques = 3;
            dayPaques = Q;
        }
        else
        {
            monthPaques = 4;
            dayPaques = Q - 31;
        }
        if (Q < 31)
        {
            monthLundiPaques = 3;
            dayLundiPaques = Q + 1;
        }
        else
        {
            monthLundiPaques = 4;
            dayLundiPaques = Q - 30;
        }
        //jeudi assencion 39 jours aprés pages

        if ((dateTraitee.AddDays(-39).Day == dayPaques) & (dateTraitee.AddDays(-39).Month == monthPaques))
        {
            return " assencion";
        }
        //dimanche de pentecote 49 jours aprés paques
        if ((dateTraitee.AddDays(-49).Day == dayPaques) & (dateTraitee.AddDays(-49).Month == monthPaques))
        {
            return " pentecote";
        }

        if (month == monthPaques & day == dayPaques)
        { return " paques"; }

        if (month == monthLundiPaques & day == dayLundiPaques)
        { return " lundi paques"; }

        if (month == 7 & day == 14)
        { return " fête nation."; }

        if (month == 1 & day == 1)
        { return " jour de l'an"; }

        if (month == 5 & day == 1)
        { return " fête du travail"; }

        if (month == 5 & day == 8)
        { return " armistice 1945"; }

        if (month == 11 & day == 11)
        { return " armistice 1918"; }

        if (month == 8 & day == 15)
        { return " assomption"; }

        if (month == 11 & day == 1)
        { return " toussaint"; }

        if (month == 12 & day == 25)
        { return " noel"; }

        return "";

    }
    private void creationCalendrier(int addSemestre)
    {
        HtmlGenericControl calendrier = new HtmlGenericControl("div id='calendrier' runat='server' class='calendrier'");
        Page.Form.Controls.Add(calendrier);
        for (int i=0; i <6; i++)
        {
            int facteurSemestre=0;
            switch (DateTime.Today.AddMonths(6*addSemestre).Month)
            {
                case 1:facteurSemestre=0;
                    break;
                case 2:facteurSemestre=-1;
                    break;
                case 3:facteurSemestre=-2;
                    break;
                case 4:facteurSemestre=-3;
                    break;
                case 5:facteurSemestre=-4;
                    break;
                case 6:facteurSemestre=-5;
                    break;
                case 7: facteurSemestre = 0;
                    break;
                case 8: facteurSemestre = -1;
                    break;
                case 9: facteurSemestre = -2;
                    break;
                case 10: facteurSemestre = -3;
                    break;
                case 11: facteurSemestre = -4;
                    break;
                case 12: facteurSemestre = -5;
                    break;
                    
            }
            int nMoisTraite = DateTime.Today.AddMonths(addSemestre*6+i+facteurSemestre).Month;
            string sMoisTraite="";
            switch (nMoisTraite)
            {
                case 1: sMoisTraite = "Janvier ";
                    break;
                case 2: sMoisTraite = "Février ";
                    break;
                case 3: sMoisTraite = "Mars ";
                    break;
                case 4: sMoisTraite = "Avril ";
                    break;
                case 5: sMoisTraite = "Mai ";
                    break;
                case 6: sMoisTraite = "Juin ";
                    break;
                case 7: sMoisTraite = "Juillet ";
                    break;
                case 8: sMoisTraite = "Aout ";
                    break;
                case 9: sMoisTraite = "Septembre ";
                    break;
                case 10: sMoisTraite = "Octobre ";
                    break;
                case 11: sMoisTraite = "Novembre ";
                    break;
                case 12: sMoisTraite = "Décembre ";
                    break;
            }

            HtmlGenericControl mois = new HtmlGenericControl("div id='" + sMoisTraite + "' class='mois' runat='server'");
            HtmlGenericControl nomMois = new HtmlGenericControl("div id='nom" + sMoisTraite + "' class='teteMois' runat='server'");
            calendrier.Controls.Add(mois);
            mois.Controls.Add(nomMois);
            Label lblMois = new Label();
            lblMois.Text = sMoisTraite;
            nomMois.Controls.Add(lblMois);
            //creation de la div premiere semaine du mois
            int nSemaineMois = 1;
            HtmlGenericControl semaineTraitee;
            semaineTraitee = new HtmlGenericControl("div id='" + sMoisTraite + nSemaineMois.ToString() + "' class='semaines' runat='server'");
            
            for (int ni = 0; ni < DateTime.DaysInMonth(DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre).Year, DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre).Month); ni++)
            {
                //ne pas ooublier les div semaine
                
                string jourTraitee = DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre)
                .AddDays(-DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre).Day + ni + 1).DayOfWeek.ToString();

                if (jourTraitee == "Monday" || ni == 0)
                {

                    semaineTraitee = new HtmlGenericControl("div id='" + sMoisTraite + nSemaineMois.ToString() + "' class='semaines' runat='server'");
                    mois.Controls.Add(semaineTraitee);
                    nSemaineMois++;
                }
                //préparation de la string du jour
                string jour = "";
                jour += (ni+1).ToString() + " " + jourTraitee;
                if (ni < 9)
                {
                    jour = jour.Replace(" ", "  ");
                }
                jour = jour.Replace("Saturday", "Samedi");
                jour = jour.Replace("Sunday", "Dimanche");
                jour = jour.Replace("Monday", "Lundi");
                jour = jour.Replace("Tuesday", "Mardi");
                jour = jour.Replace("Wednesday", "Mercredi");
                jour = jour.Replace("Thursday", "Jeudi");
                jour = jour.Replace("Friday", "Vendredi");
                
                jour = jour.Substring(0, 5);
                string libelleFerie=ferie(DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre)
                .AddDays(-DateTime.Today.AddMonths(addSemestre * 6 + i + facteurSemestre).Day + ni + 1));
                jour += libelleFerie;
                if (libelleFerie != "")
                {
                    //implementer ici une éventuelle requete sur une bdd fetes
                    //jour+=libelleFete
                    
                }

                //preparation div jour et label
                // faire test switch dimanche, ferié, samedi pour attribution cssClass

                HtmlGenericControl divJourTraite;
                //= new HtmlGenericControl("div id='" +(ni+1).ToString()+ sMoisTraite + "'");
                if (jourTraitee == "Sunday")
                {
                    divJourTraite = new HtmlGenericControl("div id='" + (ni + 1).ToString() + sMoisTraite + "' class='dimanche'");

                }
                else
                {
                    if (jourTraitee == "Saturday")
                    {
                        divJourTraite = new HtmlGenericControl("div id='" + (ni + 1).ToString() + sMoisTraite + "' class='samedi'");
                    }
                    else
                    {
                        if (libelleFerie != "")
                        {
                            divJourTraite = new HtmlGenericControl("div id='" + (ni + 1).ToString() + sMoisTraite + "' class='ferie'");
                        }
                        else
                        {
                            divJourTraite = new HtmlGenericControl("div id='" + (ni + 1).ToString() + sMoisTraite + "' class='autreJour'");
                        }
                    }
                }
               
                Label lblJour=new Label();
                lblJour.Text=jour;
                semaineTraitee.Controls.Add(divJourTraite);
                divJourTraite.Controls.Add(lblJour);

            }
        }

    }

}

coté css :

body 
{
    font-family : Arial;
    
}
.calendrier
{
    width : 666px;
    border-top :#738294 thin solid;
    border-top-width:1px;
    border-left :#738294 thin solid;
    border-left-width:1px;
}
.mois
{
    float :left;
    width : 110px;
    font-size : 11px;
    border-right :#738294 thin solid;
    border-right-width:1px;
}
.semaines
{
    border-bottom :#738294 thin solid;
    border-bottom-width:1px;
}
.teteMois
{
    font-size : 14px;
    border-bottom :#738294 thin solid;
    border-bottom-width:2px;
    text-align : center;
    background-color :#E8E8E8;
    
    
}
.dimanche
{
    background-color :#B59BFE;
}
.samedi
{
    background-color : #D9CCFF;
}
.ferie
{
    background-color : #FF8383;
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.