我需要检查用户输入的日期范围是已存在于数据表中的重叠日期
问题描述:
我有一个数据表,列中有From Date和To Date。 用户使用两个日期时间选择器dtFrom和dtTo输入日期。 我需要检查用户输入的日期是否与数据表中存在的日期和日期列重叠。例如在数据表我需要检查用户输入的日期范围是已存在于数据表中的重叠日期
FromDate ToDate
01/07/2012 30/06/2013
01/07/2013 30/06/2014
01/07/2015 30/06/2016
列现在,如果用户输入
From Date ToDate
01/07/2012 30/06/2017
我想检查是否这些日期由用户输入与存在于数据表的日期重叠。
以下是我的代码行,可以帮助我检查使用的日期是否位于数据表中存在的任何日期范围之间。
if (dbMaster.Table.Select("AC04_FROM_DATE <= "
+ dtFrom.GetDateTime().ToString("MM/dd/yyyy")
+ " AND AC04_TO_DATE >= "
+ dtTo.GetDateTime().ToString("MM/dd/yyyy") + "#'").Length > 1)
{
e.Message = "Entered Financial Period is already selected. Please enter other Financial Period.".ToLocalString();
e.IsValid = false;
}
但我的病情没有让我知道,如果通过使用输入的日期是在任何存在于数据表的日期范围的研磨。
请指导并建议我为c#桌面应用程序的解决方案
答
这是我最近在项目中使用的一个快速拷贝,用于检查最初来自重叠日期选择器的2个DateTime对象。
//Myobject contains:
//DateTime dtStart
//DateTime dtEnd
//toAdd is object I want to check (what the user just entered)
//myList is a List<MyObject> whose start and end dates I need to check against for overlaps.
private bool CheckForTimeClashes(MyObect toAdd)
{
bool overlap = false;
foreach(MyObect ri in myList)
{
overlap = toAdd.dtStart < ri.dtEnd && ri.dtStart < toAdd.dtEnd;
if (overlap)
return true;
}
return overlap; //false
}
然后,我只是为所有我想检查的对象调用它。在我的情况下,一旦我发现重叠,然后我可以返回
+0
的foreach { 如果(datarow.RowState == DataRowState.Unchanged) { 如果(Convert.ToDateTime(数据行[ “AC04_FROM_DATE”])
答
试试这个。显然这不会是你想要的,但你明白了。
var overlapping = false;
DataColumn fromCol = dataTable.Columns["FromDate"];
DataColumn toCol = dataTable.Columns["ToDate"];
foreach (DataRow row in myTable.Rows)
{
//Add your logic here
overlapping = DateTime.Parse(row[fromCol]) < Range1.Startdate;
overlapping = DateTime.Parse(row[toCol]) < Range1.Enddate;
}
要检查两个范围是否重叠,请使用以下选中范围Range1.EndDate> Range2.StartDate && Range1.StartDate
juharr
请告诉我们你有什么试着告诉我们出了什么问题。这不是“为我写代码”网站。 – Jacobr365
迭代数据表并检查重叠? –