将Combobox.SelectedItem强制转换为DateTime会导致“指定的强制转换无效”。

时间:2010-12-02 21:19:02

标签: c# winforms combobox casting

我有以下代码正确显示填充组合框

    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 个答案:

答案 0 :(得分:3)

您无法将字符串强制转换为DateTime。改为使用DateTime.Parse。

答案 1 :(得分:1)

如果您的组合是DataBinded,那么您需要执行以下操作。

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

Priority是我的实体类

答案 2 :(得分:0)

糟糕...

我完全错了。您需要获取SelectedValue而不是SelectedItem,如下所示:

DateTime StartTime = (DateTime) comboBox1.SelectedValue;

<击> 我相信您选择的商品属于Hour类型,并且您尝试将其投放为DateTime我相信您的代码应该是某些符号

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

<击>