Condividi tramite


Procedura: personalizzare giorni singoli in un controllo server Web Calendar

Aggiornamento: novembre 2007

Per impostazione predefinita, i giorni nel controllo Calendar vengono visualizzati come numeri. Se si attiva la selezione dei giorni, i numeri vengono visualizzati come collegamenti. Per informazioni dettagliate, vedere Procedura: controllare la selezione della data da parte dell'utente in un controllo server Web Calendar.

È possibile personalizzare l'aspetto e il contenuto dei singoli giorni, allo scopo di:

  • Evidenziare a livello di codice alcuni giorni, ad esempio per visualizzare i giorni festivi in un colore diverso.

  • Specificare a livello di codice se è possibile selezionare un singolo giorno.

  • Aggiungere informazioni nella visualizzazione del giorno, come i dati relativi ad appuntamenti o eventi.

  • Personalizzare il testo del collegamento sul quale gli utenti possono fare clic per selezionare un giorno.

Quando il controllo Calendar sta creando l'output da inviare al browser, genera un evento DayRender. Il controllo genera l'evento per ciascun giorno mentre ne prepara la visualizzazione, consentendo di esaminare a livello di codice la data di cui viene eseguito il rendering e di personalizzarla nel modo appropriato.

Il metodo dell'evento DayRender accetta due argomenti: un riferimento al controllo che genera l'evento, ovvero il controllo Calendar, e un oggetto di tipo DayRenderEventArgs. L'oggetto DayRenderEventArgs fornisce l'accesso ad altri due oggetti:

  • Cell, un oggetto TableCell che è possibile utilizzare per impostare l'aspetto di un singolo giorno.

  • Day, che può essere utilizzato per eseguire query di informazioni sul giorno di cui si effettua il rendering, per controllare se il giorno può essere selezionato e per aggiungere contenuto al giorno. L'oggetto Day supporta varie proprietà che possono fornire informazioni sul giorno, ad esempio IsSelected, IsToday e così via. Supporta inoltre un insieme Controls che è possibile utilizzare per aggiungere contenuto al giorno.

Per personalizzare l'aspetto di un singolo giorno

  1. Creare un metodo per gestire l'evento DayRender del controllo Calendar.

  2. Nel metodo impostare le proprietà dell'oggetto Cell, alle quali è possibile accedere con l'argomento DayRenderEventArgs.

    Nell'esempio riportato di seguito viene illustrato come modificare l'aspetto di singoli giorni. In base al metodo, i giorni festivi vengono rappresentati in giallo, mentre i giorni del fine settimana sono rappresentati in verde. Nell'esempio i giorni festivi vanno dal 23 al 30 novembre 2005.

    Protected Sub Calendar1_DayRender(ByVal sender As Object, _
            ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender
        ' Display vacation dates in yellow boxes with purple borders.
        Dim vacationStyle As New Style()
        With vacationStyle
            .BackColor = System.Drawing.Color.Yellow
            .BorderColor = System.Drawing.Color.Purple
            .BorderWidth = New Unit(3)
        End With
    
        ' Display weekend dates in green boxes.
        Dim weekendStyle As New Style()
        weekendStyle.BackColor = System.Drawing.Color.Green
    
        ' Vacation is from Nov 23, 2005 to Nov 30, 2005.
        If ((e.Day.Date >= New Date(2005, 11, 23)) _
                And (e.Day.Date <= New Date(2005, 11, 30))) Then
            e.Cell.ApplyStyle(vacationStyle)
        ElseIf (e.Day.IsWeekend) Then
            e.Cell.ApplyStyle(weekendStyle)
        End If
    End Sub
    
    protected void Calendar1_DayRender(object sender, 
        DayRenderEventArgs e)
    {
        // Display vacation dates in yellow boxes with purple borders.
        Style vacationStyle = new Style();
        vacationStyle.BackColor = System.Drawing.Color.Yellow;
        vacationStyle.BorderColor = System.Drawing.Color.Purple;
        vacationStyle.BorderWidth = 3;
    
        // Display weekend dates in green boxes.
        Style weekendStyle = new Style();
        weekendStyle.BackColor = System.Drawing.Color.Green;
    
        if ((e.Day.Date >= new DateTime(2000,11,23)) &&
            (e.Day.Date <= new DateTime(2000,11,30)))
        {
            // Apply the vacation style to the vacation dates.
            e.Cell.ApplyStyle(vacationStyle);
        }
        else if (e.Day.IsWeekend)
        {
            // Apply the weekend style to the weekend dates.
            e.Cell.ApplyStyle(weekendStyle);
        }
    

Per specificare che è possibile selezionare un singolo giorno

  1. In un metodo per l'evento DayRender del controllo Calendar determinare il giorno di cui viene eseguito il rendering ottenendo le informazioni dalla proprietà Date dell'oggetto Day.

  2. Impostare la proprietà IsSelectable di tale giorno su true.

    Nell'esempio riportato di seguito viene illustrato come impostare la data 1 ottobre 2005 come data selezionabile. Tutte le altre date vengono impostate come non selezionabili.

    Protected Sub Calendar1_DayRender(ByVal sender As Object, _
            ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender
        Dim myAppointment As Date = New Date(2005, 10, 1)
        If (e.Day.Date = myAppointment) Then
            e.Day.IsSelectable = True
        Else
            e.Day.IsSelectable = False
        End If
    End Sub
    
    protected void Calendar1_DayRender(object sender, 
        DayRenderEventArgs e)
    {
        DateTime myAppointment = new DateTime(2005, 10, 1);
        if (e.Day.Date == myAppointment)
        {
            e.Day.IsSelectable = true;
        }
        else
        {
            e.Day.IsSelectable = false; 
        }
    }
    

Per aggiungere contenuto a un singolo giorno

  • In un gestore per l'evento DayRender del controllo Calendar, aggiungere un controllo Web HTML o ASP.NET all'insieme Controls dell'oggetto Day dall'argomento DayRenderEventArgs.

    Nell'esempio riportato di seguito vengono visualizzati i giorni festivi, L'elenco dei giorni festivi viene creato come una matrice bidimensionale durante il caricamento della pagina. Le descrizioni dei giorni festivi vengono caricate negli elementi corrispondenti alla relativa data. Nel metodo dell'evento DayRender ciascun giorno viene confrontato con la matrice dei giorni festivi. Se l'elemento corrispondente della matrice dei giorni festivi contiene un valore, viene creato un controllo Label con il testo del giorno festivo e aggiunto all'insieme Controls per il relativo giorno.

    Dim holidays(13, 32) As String
    
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Load
        holidays(1, 1) = "Birthday"
        holidays(2, 14) = "Anniversary"
    End Sub
    
    Protected Sub Calendar1_DayRender(ByVal sender As Object, _
            ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender
        If e.Day.IsOtherMonth Then
            e.Cell.Controls.Clear()
        Else
            Dim aDate As Date = e.Day.Date
            Dim aHoliday As String = holidays(aDate.Month, aDate.Day)
            If (Not aHoliday Is Nothing) Then
                Dim aLabel As Label = New Label()
                aLabel.Text = "<br>" & aHoliday
                e.Cell.Controls.Add(aLabel)
            End If
        End If
    End Sub
    
    string[,] holidays = new String[13, 32];
    
    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        string aHoliday;
        DateTime theDate = e.Day.Date;
        aHoliday = holidays[theDate.Month, theDate.Day];
        if (aHoliday != null)
        {
            Label aLabel = new Label();
            aLabel.Text = " <br>" + aHoliday;
            e.Cell.Controls.Add(aLabel);
        }
    
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        holidays[1, 1] = "Birthday";
        holidays[2, 14] = "Anniversary";
    }
    

Per personalizzare il testo del collegamento per singoli giorni

  1. In un metodo per l'evento DayRender del controllo Calendar ottenere la proprietà SelectUrl dell'argomento DayRenderEventArgs. La proprietà SelectUrl restituisce lo script Java che viene generalmente restituito per tale giorno per causare un postback che indichi la selezione della data.

  2. Utilizzando la concatenazione, creare un collegamento ipertestuale HTML che utilizzi il valore della proprietà SelectUrl come attributo href.

  3. Aggiungere il collegamento ipertestuale come la proprietà Text dell'oggetto Cell.

    Nell'esempio riportato di seguito vengono visualizzati i giorni festivi, L'elenco dei giorni festivi viene creato come una matrice bidimensionale durante il caricamento della pagina. Le descrizioni dei giorni festivi vengono caricate negli elementi corrispondenti alla relativa data. Nel metodo dell'evento DayRender ciascun giorno viene confrontato con la matrice dei giorni festivi. Se l'elemento corrispondente della matrice dei giorni festivi contiene un valore, il codice crea il testo del collegamento utilizzando il nome del giorno festivo anziché il numero.

    Dim holidays(13, 32) As String
    
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Load
        holidays(1, 1) = "Birthday"
        holidays(2, 14) = "Anniversary"
    End Sub
    
    Protected Sub Calendar1_DayRender(ByVal sender As Object, _
            ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender
        If e.Day.IsOtherMonth Then
            e.Cell.Controls.Clear()
        Else
            Dim aDate As Date = e.Day.Date
            Dim aHoliday As String = holidays(aDate.Month, aDate.Day)
            If (Not aHoliday Is Nothing) Then
                e.Cell.Text = _
                    "<a href=" & e.SelectUrl & ">" & aHoliday & "</a>"
            End If
        End If
    End Sub
    
    string[,] holidays = new String[13, 32];
    
    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        string aHoliday;
        DateTime theDate = e.Day.Date;
        aHoliday = holidays[theDate.Month, theDate.Day];
        if (aHoliday != null)
        {
            e.Cell.Text = "<a href=" + e.SelectUrl + ">" + 
               aHoliday + "</a>";
        }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        holidays[1, 1] = "Birthday";
        holidays[2, 14] = "Anniversary";
    }
    

Vedere anche

Attività

Procedura: visualizzare nel controllo Calendar date specifiche ottenute da un database

Concetti

Cenni preliminari sul controllo server Web Calendar