2016-03-07 19 views
-3

我有一個數據表,列中有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#桌面應用程序的解決方案

+1

要檢查兩個範圍是否重疊,請使用以下選中範圍Range1.EndDate> Range2.StartDate && Range1.StartDate juharr

+3

請告訴我們你有什麼試着告訴我們出了什麼問題。這不是「爲我寫代碼」網站。 – Jacobr365

+0

迭代數據表並檢查重疊? –

回答

1

這是我最近在項目中使用的一個快速拷貝,用於檢查最初來自重疊日期選擇器的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」]) JunIkram

-1

試試這個。顯然這不會是你想要的,但你明白了。

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; 
} 
相關問題