Belegungsplan in Jahresübersicht
Ich suche ein Control für eine aspx Seite, das mir alle Tage eines Jahres anzeigt.
So wie das CalendarControl die Wochen eines Monats anzeigt,
möchte ich die Monate eines Jahres darstellen.
Die Wochen-Tage nebeneinander auf der x-Achse und die Monate in Zeilen (y-Achse) (s. Link für Beispielbild)
TopLabs (Answers)
| Thumbnail | TopLab | Author | Date | Reward |
|---|---|---|---|---|
|
Der Control Code
Der Code war für OLI-it zu lang. Deshalb musste ich die eingebettete Klasse im obigen Code ausschneiden und füge sie hier ein: <pre>// eigene Klasse für die EventArguments public class DayRenderEventArgs : EventArgs { public DateTime date; public HtmlTableCell cell; public DayRenderEventArgs(DateTime day, HtmlTableCell cell) { this.date = day; this.cell = cell; } }</pre> |
unixmaster | 2007-01-16 | $0.24 | |
|
Der Control Code
<pre>// der Code vom ascx Control // ---------------------------- using System.Globalization; using System.Threading; public delegate void DayRenderHandler (object sender, DayRenderEventArgs e); public partial class BelegungsplanControl : System.Web.UI.UserControl { public event DayRenderHandler DayRender; HtmlTable tbl; HtmlTableRow row; HtmlTableCell cell; string[] monate; string[] tage; public string Jahr = "2007"; protected void Page_Load(object sender, EventArgs e) { monate = DateTimeFormatInfo.CurrentInfo.MonthNames; tage = DateTimeFormatInfo.CurrentInfo.ShortestDayNames; tbl = new HtmlTable(); PlaceHolder1.Controls.Add(tbl); createHeader(); for(int monatIdx = 0; monatIdx < 12; monatIdx++) { // neue Zeile für den Monat row = new HtmlTableRow(); tbl.Rows.Add(row); // Monatsname cell = new HtmlTableCell(); cell.InnerHtml = monate[monatIdx]; row.Cells.Add(cell); // Der erste Tag im Monat DateTime day = DateTime.Parse(Jahr + "-" + (monatIdx+1).ToString() + "-1"); // leere Zellen bis zum richtigen Wochentag for (int leer = 0; leer < (int)day.DayOfWeek; leer++) { cell = new HtmlTableCell(); cell.InnerHtml = "-"; row.Cells.Add(cell); } // Die Tage des Monats füllen while (day.Month == (monatIdx + 1)) { cell = new HtmlTableCell(); cell.InnerHtml = day.Day.ToString(); row.Cells.Add(cell); // Ereignis auslösen if (DayRender != null) { DayRenderEventArgs drea = new DayRenderEventArgs(day,cell); DayRender(this, drea); } // nächster Tag day = day.AddDays(1); } } } // erstellt die erste Zeile mit den Wochentagsnamen private void createHeader() { row = new HtmlTableRow(); tbl.Rows.Add(row); // leere Zelle cell = new HtmlTableCell(); row.Cells.Add(cell); // 5 Wochen aneinander hängen for (int i = 0; i < 5; i++) { foreach(string tag in tage) { cell = new HtmlTableCell(); cell.InnerHtml = tag; row.Cells.Add(cell); } } } } </pre> |
unixmaster | 2007-01-16 | $0.85 | |
|
Der Code der Seite
Zuerst der Code von der Seite, auf der das Control verwendet wird (an jedem Tag, der eine 7 enthält ist die Zelle grün) // aspx Seite, die das Control enthält. // ----------------------------------- public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { BelegungsplanControl1.Jahr = "2007"; BelegungsplanControl1.DayRender += new DayRenderHandler(BelegungsplanControl1_DayRender); } // diese Methode wird für jeden Tag des Jahres aufgerufen void BelegungsplanControl1_DayRender(object sender, DayRenderEventArgs e) { // beim passenden Datum kann man die Zelle verändern if (e.date.Day.ToString().Contains("7")) { e.cell.BgColor = "green"; e.cell.InnerHtml += "frei"; } } } |
Gast | 2007-01-16 | $0.58 | |
|
Das WebControl will ich auch
So was wollte ich auch schon immer mal haben und weil das Bild so simpel aussah, habe ich das jetzt einfach mal gemacht. Ich habe ein neues WebControl erstellt und einen Placeholder draufgezogen. Im Code beside wird eine Html Tabelle erstellt und für jeden Tag ein Ereignis gefeuert, über das man dann die Farbe der Zelle und ggf. Text oder Bilder einstellen kann. |
Gast | 2007-01-16 | $0.24 |