2012-08-25 188 views
0

我需要用戶能夠選擇一個日期,但可能發生的情況是用戶不知道確切的日期或月份,而是年份。設置日期無日期或月份

我正在考慮創建一個選擇器,每個選項都帶有可選項目,並將其保存在DateTime屬性中。但我不知道如何指定未知部分的值。

我可以使用單獨的int?字段的日,月和年,但我想知道是否有更好的方法。

任何想法?

+2

WPF中,的WinForms和ASP.Net? –

+0

對不起,ASP.Net MVC3。我更新了標籤。 – kerzek

+0

請更改您的問題。 – adatapost

回答

4

DateTime必須是一個有效日期,所以你不能只把年份放在裏面,你至少還需要一天一個月。這在您的情況下是有問題的,因爲您無法區分2012年1月1日和2012年之間的日期。我沒有看到如何在DateTime內保留值,除非您還有日期和月份。

這裏的最佳解決方案就像你所說的那樣,將這些值保留在整數中,並將值0置於未指定的字段中。

+0

使用int?也是一個完全可行的選擇。 – Tipx

+0

對,我不知道這是一個實際的類型。 – VoidStar

0

在用戶界面上,您可以使用日期範圍而不是單個日期嗎?

如果他們只知道年份,則選擇一年中1/1至12/31的範圍。無論哪種方式,選擇一個完整的日期,而不是一個無效的/部分的日期是一個不錯的主意。

0

是使用單獨的字段。具有選定月份的值,在mdl中爲1,2,3 ... 12,在ddl中選擇日期爲1,2,3 ... 31。沒有在ydl中選擇年份。而是繼續像當年一些理想值選擇

通過DDL,MDL,YDL我的意思是你的下拉列表在一天中的名稱,月,年分別

顯示用戶手冊標籤當年的選擇是強制性

可選(示例代碼):

當用戶提交,檢查一個月,一天,你應該做的審定

string userDate = "" 
if (ddl.SelectedIndex>0) 
{ //then you can try to validate date as 
try 
{ 
string temp=ydl.SelectedItem.ToString()+"-"+ydl.SelectedItem.ToString(); 
temp += " "+ydl.SelectedItem.ToString() 
DateTime dt=Convert.ToDateTime(temp); 
userDate=dt.ToString("yyyy-MM-dd"); 
} 
catch 
{ 
//Display message on some label that chosen date is invalid 
return; 
} 
} 
else 
{ 
userDate=ydl.SelectedItem.ToString(); 
if (mdl.SelectedIndex>0) 
{ 
userDate += mdl.SelectedItem.ToString(); 
} 
} 

現在你可以userDate(字符串)爲你想要使用的目的

在這裏記住,你不應該使用dateDatime,而不是像userDate這樣的字符串,因爲用戶輸入將變得像2012-01-01一個固定的日期。在這種情況下,你不能只使用一年

0

我建議你創建一個自定義類。

public class CustomDate 
{ 
    public int? Day { get; set; } 

    public int? Month { get; set; } 

    public int Year { get; set; } 

    public DateTime? Date 
    { 
     get 
     { 
     if(Year > 0 && Day.HasValue && Day.Value > 0 
      && Month.HasValue && Month.Value > 0) 

      return new DateTime(Year, Month.Value, Day.Value); 

     return null; 
     } 
    } 
}