F: Ich speichere alle Daten für Appointment-Recurrence und Exception in eine SQL Server-Datenbank. Besteht die Möglichkeit zum manuellen Erzeugen von Exceptions für meine Wiederholungen?
A: Exceptions können vom Code mithilfe der Methode Recurrence.MarkException(Item, bool) erzeugt werden. Sie müssen eine Referenz auf das Item-Ereignis bereitstellen, das als Exception gekennzeichnet wird. Zur Gewinnung einer einzigen Instanz eines sich wiederholenden Items, rufen Sie die Methode Recurrence.GenerateItems auf.
F: Wenn ich ein Appointment anlege und ein Reminder-Objekt einrichte, funktioniert es zu einem bestimmten Zeitpunkt nicht!
A: Reminders in Planner.NET rufen ein Ereignis auf. Sie müssen Schedule.ItemReminderTriggered behandeln, damit Sie über einen Reminder benachrichtigt werden. In der Annahme, dass die Variable 'calendar' auf ein Planner.NET Kalendercontrol verweist; das Code unten zeigt, wie das Ereignis behandelt werden könnte:
calendar.Schedule.ItemReminderTriggered += new MindFusion.Scheduling.ItemEventHandler(OnItemReminder); // ... private void OnItemReminder(object sender, MindFusion.Scheduling.ItemEventArgs e) { MessageBox.Show(e.Item.Reminder.Message); }
F: Wie kann ich meine eigene Eigenschaft zur Appointment Klasse hinzufügen? Ich brauche zwei Datenwerte in der Appointment-Klasse.
A: Damit Sie kundenspezifische Daten zu einem Appointment hinzufügen, sollen Sie Ihre eigene von Appointment abgeleitete Klasse erstellen. Sie können die erwünschten zusätzlichen Eigenschaften zu der abgeleiteten Klasse hinzufügen.
Das folgende Beispiel zeigt, wie Sie dies erreichen können:
class MyAppointment : Appointment { public MyAppointment() { customData = 5; } public int CustomData { get { return customData; } set { customData = value; } } private int customData; }
Nutzen Sie die Eigenschaft Calendar.InteractiveItemType, um zu bestimmen, dass Items von Ihrer Klasse instanziiert werden sollen, jedes Mal wenn der Nutzer Items interaktiv erstellt. In diesem Fall müssen Sie gewährleisten, dass Ihre Klasse einen Konstruktor ohne Parameter bereitstellt, wie in der Dokumentation für Planner.NET beschrieben wurde.
Hinweis: Lesen Sie im Tutorial #4 in der Dokumentation wie Sie kundenspezifische Appointment-Klassen erstellen können, die auch Serialisierung, Recurrence und Duplikation unterstützen.
F: Ich soll die Füllfarbe eines Items auf eine bestimmte Farbe für jeden Item-Status innerhalb einer einzelnen Monats- und Stundenplanansicht einstellen. Gibt es ein Kalender-Attribut, das dazu verwendet werden kann?
A: Stellen Sie die Eigenschaft 'Brush' des zu dem Item zugeordneten Style-Objekts ein. Zum Beispiel, wenn 'item' eine Variable ist, die sich auf das Item bezieht, dessen Hintergrundfarbe Sie ändern wollen, sollte der folgende Sample-Code dies ausführen:
item.Brush = MindFusion.Drawing.SolidBrush(Color.Green);Sie sollen SelectedStyle.Brush verwenden, um die Füllfarbe des selektierten Items zu ändern.
F: Können Sie mir bitte sagen, wie ich den Index eines Items in der Timetable View erhalten kann. Ich verwende meine eigenen ID Nummern und Tags aus einer Datenbank und soll ein Item löschen. Die einzige Vorgehensweise, die mir einfällt, ist das Löschen übei die Verwendung der Indexnummer. Wie kann ich den Index bekommen oder wie kann ich das Item über seine ID oder Tag löschen.
A: Die Items werden in einer Collection gespeichert, auf die über die Eigenschaft Calendar.Schedule.Items zugegriffen werden kann. Damit Sie den Index eines bestimmten Items innerhalb dieser Collection finden, rufen Sie einfach die IndexOf-Methode der Collection auf. Sie können auch diese Collection durchlaufen und das Item entfernen, das den jeweiligen Kriterien entspricht (wie z.B. mit einen bestimmten Tag oder Id).
F: Wie kann die Farbe für Appointments in der Resource View angepasst werden?
A: Die Items in Resource View verwenden Style.HeaderBrush, um deren Inhalt darzustellen.
F: Ist es möglich, an einer Leerstelle in der Kalenderansicht doppelzuklicken, und ein Appointment-Dialogfenster zum Anlegen eines Events auszuklappen (pop up window)?
A: Sie können das Ereignis DateClick bearbeiten und das Fenster zum Anlegen von Appointments dabei anzeigen. Sie können die Clicks-Eigenschaft des entsprechenden Eventdaten-Objekts überprüfen, um die Anzahl der Mausklicks zu bestimmen. Ein Wert von 2 bedeutet, dass die Maustaste doppelgeklickt wurde.
F: Wie kann ich die Anzahl der gleichzeitigen Appointments beschränken? Ich will ein automatisches System zum Erstellen von Appointments entwickeln. Wenn der Nutzer zu schleppen (drag) beginnt, will ich die Anzahl der gleichzeitigen Appointments einschränken.
A: Die folgende Methode verhindert es, dass die Nutzer mehr als 3 Appointments an einem einzigen Tag in Monats-, Listen- oder Wochenübersichten ziehen (dragging). Die Methode hat einen Handler des Events Calendar.ItemModifying dar, das gestartet wird, wenn der Nutzer Appointments verschiebt oder deren Größe verändert. Die Einstellung der Confirm-Eigenschaft des bereitgestellten EventArgs-Objekts verbietet die Funktion.
private void calendar_ItemModifying(object sender, ItemModifyConfirmEventArgs e) { DateTime from = e.NewStartTime.Date; DateTime to = from + new TimeSpan(TimeSpan.TicksPerDay - 1); while (to < e.NewEndTime.Date) { if (calendar.Schedule.GetAllItems(from, to).Count > 2) { e.Confirm = false; return; } from += TimeSpan.FromDays(1); to = from + new TimeSpan(TimeSpan.TicksPerDay - 1); } }