【问题标题】:Casting Combobox.SelectedItem back to DateTime causes "Specified cast is not valid."将 Combobox.SelectedItem 转换回 DateTime 会导致“指定的转换无效”。
【发布时间】:2010-12-02 21:19:02
【问题描述】:

我有以下正确显示的代码填充了一个组合框

    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 数据。使用给出的解决方案给出了正确的信息。

【问题讨论】:

    标签: c# winforms combobox casting


    【解决方案1】:

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

    【讨论】:

    • @Cj S. SelectedItem 不返回应该返回 DateTime 类型的 hours.atime 的 ValueMember 吗?为什么会返回一个字符串?
    • 完全间隔以为我正在查看 ajaxcontroltookit 问题 :-) 无论如何,如果您在抛出强制转换异常的行上停止调试器,您会看到 SelectedItem 属性是 Hour 的一个实例(如果用户在组合框中输入自己的值,则为 null)。所以投到一个小时,然后摘掉atime。像这样`DateTime StartTime = ((Hour)comboBox1.SelectedItem).atime;`
    • @Cj S. 是的!我只是在尝试,发现它正在返回 Hour 类型,但您已经得到了答案!谢谢。
    【解决方案2】:

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

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

    Priority 是我的实体类

    【讨论】:

      【解决方案3】:

      哎呀...

      我完全错了。您需要像这样获取SelectedValue 而不是SelectedItem

      DateTime StartTime = (DateTime) comboBox1.SelectedValue;
      

      我相信您选择的项目是 Hour 类型的,并且您正试图将其转换为 DateTime 我相信您的代码应该类似于

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

      【讨论】:

      • @LWK 我尝试使用 combobox1.SelectedValue 但它仍然给了我同样的错误“指定的演员表无效。”
      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多