using Infragistics.Win;
using Infragistics.Win.UltraWinSchedule;
using Infragistics.Win.UltraWinSchedule.WeekView;
using System.Diagnostics;
private void OptimizeControlForAppointmentDisplay()
{
DateTime yesterday = DateTime.Today.AddDays( -1.0F );
DateTime today = DateTime.Today;
DateTime tomorrow = DateTime.Today.AddDays( 1.0F );
// アクティビティを追加します
// 予定の追加
if ( this.ultraWeekView.CalendarInfo.Appointments.Count == 0 )
{
for ( int i = 1; i <= 5; i ++ )
this.ultraWeekView.CalendarInfo.Appointments.Add(yesterday, "Yesterday's appointment " + i.ToString() );
for ( int i = 1; i <= 3; i ++ )
this.ultraWeekView.CalendarInfo.Appointments.Add(today, "Today's appointment " + i.ToString() );
for ( int i = 1; i <= 10; i ++ )
this.ultraWeekView.CalendarInfo.Appointments.Add(tomorrow, "Tomorrow's appointment " + i.ToString() );
}
// メモの追加
if ( this.ultraWeekView.CalendarInfo.Notes.Count == 0 )
{
for ( int i = 1; i <= 1; i ++ )
this.ultraWeekView.CalendarInfo.Notes.Add(yesterday, "Yesterday's note " + i.ToString() );
for ( int i = 1; i <= 2; i ++ )
this.ultraWeekView.CalendarInfo.Notes.Add(today, "Today's note " + i.ToString() );
for ( int i = 1; i <= 5; i ++ )
this.ultraWeekView.CalendarInfo.Notes.Add(tomorrow, "Tomorrow's note " + i.ToString() );
}
// 休日の追加
if ( this.ultraWeekView.CalendarInfo.Holidays.Count == 0 )
this.ultraWeekView.CalendarInfo.Holidays.Add(yesterday, "My 2-day Holiday" );
// 最もアクティビティがある日を決定します
// すべての予定の StartDateTime プロパティにある特定の日付の発生を
// カウントし、最も発生が多い日を
// トラックします。
//
DateTime dateWithMostActivity = DateTime.Today;
int count = 0, tempCount = 0;
foreach( Appointment outer in this.ultraWeekView.CalendarInfo.Appointments )
{
tempCount = 0;
foreach( Appointment inner in this.ultraWeekView.CalendarInfo.Appointments )
{
if ( inner.StartDateTime.Date == outer.StartDateTime.Date )
tempCount++;
}
// この日付に以前の日付より予定が多くある場合、
// カウントを変更し、新しい dateWithMostActivity を設定します
if ( tempCount > count )
{
count = tempCount;
dateWithMostActivity = outer.StartDateTime;
}
}
// 予定がない場合、何もせずに返します
if ( count == 0 )
return;
// CalendarInfo オブジェクトの FirstDayOfWeek プロパティを
// 最も予定がある曜日に設定します
this.ultraWeekView.CalendarInfo.FirstDayOfWeek = (FirstDayOfWeek)( dateWithMostActivity.DayOfWeek );
// 表示する曜日以外のすべての DayOfWeek オブジェクトの Visible プロパティを
// False に設定します
foreach( Infragistics.Win.UltraWinSchedule.DayOfWeek dow in this.ultraWeekView.CalendarInfo.DaysOfWeek )
{
if ( (int)(dow.DayOfTheWeek) != (int)(dateWithMostActivity.DayOfWeek) )
dow.Visible = false;
else
dow.Visible = true;
}
// CalendarInfo オブジェクトの ActiveDay プロパティを
// 最もアクティビティがある日に設定します
this.ultraWeekView.CalendarInfo.ActiveDay = this.ultraWeekView.CalendarInfo.GetDay( dateWithMostActivity, true );
// その日をビューへ移動して表示します
this.ultraWeekView.ScrollDayIntoView( dateWithMostActivity );
// コントロールで予定の表示を最適化するために、
// コントロールの ActivityDisplayStyle プロパティを設定すると、
// 他のアクティビティ (メモおよび休日) は表されません
this.ultraWeekView.ActivityDisplayStyle = ActivityDisplayStyleEnum.Appointments;
// 表示を更新するには、すべての UIElements をダーティして確認します
this.ultraWeekView.UIElement.DirtyChildElements();
this.ultraWeekView.UIElement.VerifyChildElements();
// DayDisplayStyle プロパティを Full に設定します
this.ultraWeekView.DayDisplayStyle = DayDisplayStyleEnum.Full;
}