我有一個日曆,你可以把一些約會的議程,但不允許第一次約會第二次約會。所以不允許他們相互交叉。我嘗試這樣的:比較兩個日期,不允許重疊的第一個議程事件
public bool IsOverlapping(AgendaEventViewModel viewModel, AgendaEventViewModel newItem)
{
bool isOverlapping = false;
DateTime? begin = DateTime.Parse(viewModel.start);
DateTime? end = DateTime.Parse(viewModel.end);
newItem = new AgendaEventViewModel();
DateTime begin2 = DateTime.Parse(newItem.start);
DateTime end2 = DateTime.Parse(newItem.end);
// TODO: Check if Event is Overlapping with other events :) Dynamic RoomRules Check should implemented here
if (begin > end || begin2 > end2)
isOverlapping = false;
if (begin == end || begin2 == end2)
isOverlapping = false; // No actual date range
if (begin > end || begin2 > end2)
{
isOverlapping = false;
}
if (begin == begin2 && end == end2)
{
isOverlapping = true;
this.ShowMessage(Message.Type.Info, Resources.AgendaEvent.IsOverlapping);
}
if (begin < begin2)
{
if (end > begin2 && end < end2)
isOverlapping = true; // possible1
if (end > end2)
isOverlapping = true; // possible 3
}
else
{
if (end2 > begin && end2 < end)
isOverlapping = true; // possible 2
if (end2 > end)
isOverlapping = true; // possible 4
}
return isOverlapping;
}
,這是AgendaEventViewModel:
public class AgendaEventViewModel
{
public string ReturnUrl { get; set; }
public string id { get; set; }
public int? funeralId { get; set; }
public int? reservationId { get; set; }
public int? roomId { get; set; }
[Display(Name = "Title", ResourceType = typeof(Resources.AgendaEvent))]
public string title { get; set; }
[Display(Name = "Start", ResourceType = typeof(Resources.AgendaEvent))]
public string start { get; set; }
[Display(Name = "End", ResourceType = typeof(Resources.AgendaEvent))]
public string end { get; set; }
public string top { get; set; }
public string left { get; set; }
public List<RoomItemModel> RoomItems { get; set; }
public List<CateringItemModel> CateringItems { get; set; }
[Display(Name = "SeatingCapacity", ResourceType = typeof(Resources.AgendaEvent))]
public int? SeatingCapacity { get; set; } //Max Room SeatingCapacity
[Display(Name = "ExpectedSeatingCapacity", ResourceType = typeof(Resources.AgendaEvent))]
public int? ExpectedSeatingCapacity { get; set; } // User Chosen
}
,但我得到這一行此錯誤:
日期時間begin2 = DateTime.Parse(newItem.start) ;與此錯誤:
類型「System.ArgumentNullException」的一個例外發生在mscorlib.dll但在用戶代碼中沒有處理
其他信息:String引用不設置爲一個字符串的一個實例。
謝謝
好吧,我現在,像這樣:
public bool IsOverlapping(AgendaEventViewModel viewModel, AgendaEventViewModel newItem)
{
bool isOverlapping = false;
// ReservationModel r = new ReservationModel(int.Parse(viewModel.id));
DateTime? begin = DateTime.Parse(viewModel.start);
DateTime? end = DateTime.Parse(viewModel.end);
newItem = new AgendaEventViewModel();
newItem.start = "2014-08-11 10:00:00.000";
newItem.end = "2014-08-11 11:00:00.000";
DateTime? begin2 = DateTime.Parse(newItem.start);
DateTime? end2 = DateTime.Parse(newItem.end);
// TODO: Check if Event is Overlapping with other events :) Dynamic RoomRules Check should implemented here
if (begin > end || begin2 > end2)
isOverlapping = false;
if (begin == end || begin2 == end2)
isOverlapping = false; // No actual date range
if (begin > end || begin2 > end2)
{
isOverlapping = false;
}
//if ((begin <= end2) && (begin2 <= end))
//{
// this.ShowMessage(Message.Type.Info, Resources.AgendaEvent.IsOverlapping);
// isOverlapping = true;
//}
if (begin == begin2 && end == end2)
{
this.ShowMessage(Message.Type.Info, Resources.AgendaEvent.IsOverlapping);
isOverlapping = true;
}
if (begin < begin2)
{
if (end > begin2 && end < end2)
isOverlapping = true; // possible1
if (end > end2)
isOverlapping = true; // possible 3
}
else
{
if (end2 > begin && end2 < end)
isOverlapping = true; // possible 2
if (end2 > end)
isOverlapping = true; // possible 4
}
return isOverlapping;
}
但是如果我把第二個議題上的日曆,然後開始帶結束將通過END2和begin2覆蓋。
對於只有一個參數的函數,您將得到一個ArgumentNullException。我認爲這是一個很好的指示,newItem.start爲空。看看你的代碼 - 你用newItem = new AgendaEventViewModel();來清除傳入的newItem。 – 2014-11-05 16:08:45