我有一个日历,你可以把一些约会的议程,但不允许第一次约会第二次约会。所以不允许他们相互交叉。我尝试这样的:比较两个日期,不允许重叠的第一个议程事件
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