2010-12-02 61 views
1

我有正确显示填充的组合框将Combobox.SelectedItem转换回DateTime会导致“指定的转换无效”。

class Hour 
    { 
     public string shownHour {get;set;} 
     public DateTime atime {get;set;} 
    } 

    (...) 

    DateTime now = new DateTime(); 
    now = DateTime.Now; 

    List<Hour> hours = new List<Hour> 
     { 
      new Hour{shownHour = "8:00 AM", atime = new DateTime(now.Year, now.Month, now.Day, 8,0,0)}, 
      new Hour{shownHour = "8:30 AM", atime = new DateTime(now.Year, now.Month, now.Day, 8,30,0)} 
     }; 

    comboBox1.DataSource = hours; 
    comboBox1.ValueMember = "atime"; 
    comboBox1.DisplayMember = "shownHour"; 

我看到了“8:00 AM”和“8:30 AM”在组合框中正确填充和可选择以下代码。但是,当我尝试检索ComboBox_SelectedIndexChanged事件中的ValueMember时,我收到“指定的转换无效”。错误。我似乎无法用下面的代码找回它。

DateTime StartTime = (DateTime) comboBox1.SelectedItem; 

在调试器中,我看到从combobox.SelectedItem会将atime和它似乎被格式化为DateTime类型,但我似乎无法将它转换回。我是否错误地处理了这个问题?

解决方案:正如@Cj S指出的那样,Combobox.SelectedItem正在返回Hour类型,我认为它会返回类型为DateTime的Hour.atime的数据。使用给出的解决方案给出了正确的信息。

回答

3

您不能将字符串强制转换为DateTime。改用DateTime.Parse。

+0

@Cj S.不返回的SelectedItem应返回DateTime类型的hours.atime的ValueMember?为什么它会返回一个字符串? – 2010-12-02 21:46:02

+0

完全分隔的想法我在看ajaxcontroltookit问题:-)无论如何,如果您停止调试器在抛出转换异常的行上,您将看到SelectedItem属性是Hour实例(或者如果用户输入他们在组合框中的价值)。所以施展一个小时,然后选择一个时间。像这样`DateTime StartTime =((Hour)comboBox1.SelectedItem).atime;` – 2010-12-02 22:07:28

0

糟糕...

我完全错了。你需要得到SelectedValue代替SelectedItem这样的:

DateTime StartTime = (DateTime) comboBox1.SelectedValue; 

我相信你的选择的项目是类型 Hour,而你试图将它转换为 DateTime我相信你的代码应该是somethign像

DateTime StartTime = (DateTime) comboBox1.SelectedItem.atime; 

1

如果你的组合体被DataBinded那么你需要做到以下几点。

int intId = ((Priority)comboPriority.SelectedValue).Id; 

哪里Priority是我的实体类