Присвоение Combobox.SelectedItem обратно в DateTime вызывает «Указанное приведение недействительно». - PullRequest
1 голос
/ 03 декабря 2010

У меня есть следующий код, который появляется правильно, заполняет поле со списком

    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» правильно заполняются и выбираются в выпадающем списке. Однако, когда я пытаюсь получить ValueMember в событии ComboBox_SelectedIndexChanged, я получаю «Указанное приведение неверно». ошибка. Я не могу восстановить его с помощью следующего кода.

DateTime StartTime = (DateTime) comboBox1.SelectedItem;

В отладчике я вижу atime из выпадающего списка. Выбранный элемент выглядит так, как будто он отформатирован как тип DateTime, но я не могу откинуть его обратно. Я неправильно подхожу к этой проблеме?

Решение : как указано ниже @Cj S, Combobox.SelectedItem возвращал тип Hour, где я думал, что он будет возвращать данные Hour.atime типа DateTime. Использование данного решения дало правильную информацию.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

Вы не можете привести строку к DateTime. Вместо этого используйте DateTime.Parse.

1 голос
/ 17 января 2012

Если ваша комбинация имеет DataBinded, вам нужно сделать следующее.

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

Где Priority - мой класс сущности

0 голосов
/ 03 декабря 2010

Упс ...

Я был совершенно не прав.Вам нужно получить SelectedValue вместо SelectedItem следующим образом:

DateTime StartTime = (DateTime) comboBox1.SelectedValue;

Я считаю, что выбранный вами предмет относится к типу Hour, и вы пытаетесь разыграть егокак DateTime Я считаю, что ваш код должен быть примерно таким же, как

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...