Gewusst wie: Anpassen einzelner Tage in einem Calendar-Webserversteuerelement
Aktualisiert: November 2007
Standardmäßig werden Tage im Calendar-Steuerelement als Zahlen angezeigt. Wenn die Datumsauswahl aktiviert wird, werden die Zahlen als Links angezeigt. Ausführliche Informationen finden Sie unter Gewusst wie: Steuern der Benutzerdatumsauswahl in einem Calendar-Webserversteuerelement.
Sie können jedoch die Darstellung und den Inhalt einzelner Tage anpassen. Dadurch wird Folgendes ermöglicht:
Programmgesteuertes Hervorheben bestimmter Tage, indem z. B. Feiertage andersfarbig dargestellt werden.
Programmgesteuertes Angeben, ob ein einzelner Tag ausgewählt werden kann.
Hinzufügen von Informationen zu einer Tagesanzeige, z. B. Termin- oder Ereignisinformationen.
Anpassen des Verknüpfungstexts, auf den Benutzer klicken können, um einen Tag auszuwählen.
Wenn das Calendar-Steuerelement die Ausgabe für den Browser erstellt, löst es ein DayRender-Ereignis aus. Das Ereignis wird vom Steuerelement für jeden Tag ausgelöst, der für die Anzeige vorbereitet wird. So kann programmgesteuert überprüft werden, welcher Tag ausgegeben wird. Anschließend kann er entsprechend angepasst werden.
Die DayRender-Ereignismethode übernimmt zwei Argumente: einen Verweis auf das Steuerelement, von dem das Ereignis ausgelöst wurde, also das Calendar-Steuerelement, und ein Objekt vom Typ DayRenderEventArgs. Mit dem DayRenderEventArgs-Objekt kann auf zwei zusätzliche Objekte zugegriffen werden:
Cell, ein TableCell-Objekt, mit dem die Darstellung eines einzelnen Tages festgelegt werden kann.
Day, mit dem Informationen über den Tag abgefragt werden können, der ausgegeben wird. Weiterhin kann damit gesteuert werden, ob die Möglichkeit zur Auswahl eines Tages bestehen soll. Darüber hinaus kann Inhalt zu einem Tag hinzugefügt werden. Vom Day-Objekt werden verschiedene Eigenschaften unterstützt, mit denen Informationen über den Tag abgerufen werden können, z. B. IsSelected oder IsToday. Eine Controls-Auflistung wird ebenfalls unterstützt. Sie kann geändert werden, damit Inhalt zum Tag hinzugefügt wird.
So passen Sie die Darstellung eines einzelnen Tages an
Erstellen Sie eine Methode, um das DayRender-Ereignis des Calendar-Steuerelements zu behandeln.
Legen Sie in der Methode die Eigenschaften des Cell-Objekts fest, auf das Sie mit dem DayRenderEventArgs-Argument Zugriff haben.
Im folgenden Beispiel wird gezeigt, wie die Darstellung von einzelnen Tagen geändert werden kann. Von der Methode werden freie Tage im Kalender in gelb ausgegeben, während Wochentage in grün ausgegeben werden. Im Beispiel sind der 23. – 30. November 2005 Urlaubstage.
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); }
So geben Sie programmgesteuert an, dass ein einzelner Tag ausgewählt werden kann
Bestimmen Sie in einer Methode für das DayRender-Ereignis des Calendar-Steuerelements, welcher Tag aufgrund der Information aus der Date-Eigenschaft des Day-Objekts ausgegeben wird.
Legen Sie die IsSelectable-Eigenschaft dieses Tages auf true fest.
Das folgende Beispiel zeigt, wie ausschließlich der 1. Oktober 2005 auswählbar gemacht wird, während alle anderen Datumsangaben nicht auswählbar sind.
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; } }
So fügen Sie Inhalt zu einem einzelnen Tag hinzu
Fügen Sie in einem Handler für das DayRender-Ereignis des Calendar-Steuerelements jedes HTML- oder ASP.NET-Websteuerelement aus dem DayRenderEventArgs-Argument zu der Controls-Auflistung des Day-Objekts hinzu.
Im folgenden Beispiel werden Feiertage angezeigt. Die Liste der Feiertage wird als zweidimensionales Array während des Ladens der Seite erstellt. Feiertagsbeschreibungen werden in die Elemente geladen, die dem Datum entsprechen. Jeder Tag wird in der Methode für das DayRender-Ereignis mit dem Array der Feiertage verglichen. Wenn das entsprechende Element im Array der Feiertage einen Wert aufweist, wird ein Label-Steuerelement mit dem Text des Feiertages erstellt. Dieses wird der Controls-Auflistung für den Tag hinzugefügt.
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"; }
So passen Sie den Verknüpfungstext für einzelne Tage an
Rufen Sie in einer Methode für das DayRender-Ereignis des Calendar-Steuerelements die SelectUrl-Eigenschaft des DayRenderEventArgs-Arguments ab. Die SelectUrl-Eigenschaft gibt das JavaScript zurück, das gewöhnlich für diesen Tag ausgegeben wird, um ein Postback anzustoßen, welches die Datumsauswahl anzeigt.
Erstellen Sie durch Verkettung einen HTML-Hyperlink, der den Wert der SelectUrl-Eigenschaft als href-Attribut verwendet.
Fügen Sie den Hyperlink als Text-Eigenschaft des Cell-Objekts hinzu.
Im folgenden Beispiel werden Feiertage angezeigt. Die Liste der Feiertage wird als zweidimensionales Array während des Ladens der Seite erstellt. Feiertagsbeschreibungen werden in die Elemente geladen, die ihrem Datum entsprechen. Jeder Tag wird in der Methode für das DayRender-Ereignis mit dem Array der Feiertage verglichen. Wenn das entsprechende Element im Array für die Feiertage einen Wert enthält, erstellt der Code einen Linktext mit der Bezeichnung des Feiertags anstelle der Nummer.
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"; }
Siehe auch
Aufgaben
Gewusst wie: Anzeigen von ausgewählten Daten aus einer Datenbank im Calendar-Steuerelement