2010-12-02 9 views
1

Ich habe den folgenden Code, der auffüllt richtig angezeigt wird eine ComboboxCasting Combobox.SelectedItem zurück zu DateTime verursacht "Angegebene Cast ist nicht gültig."

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"; 

Ich bin die „8.00“ und „08.30“ richtig bevölkern und wählbar in der Combobox sehen. Wenn ich jedoch versuche, das ValueMember im ComboBox_SelectedIndexChanged-Ereignis abzurufen, erhalte ich die Fehlermeldung "Angegebener Cast ist nicht gültig." Error. Ich kann es nicht mit dem folgenden Code abrufen.

DateTime StartTime = (DateTime) comboBox1.SelectedItem; 

Im Debugger, ich bin die atime vom combobox.SelectedItem zu sehen und es nicht erscheint als Typ Datetime formatiert zu werden, aber ich kann nicht scheinen, zurück zu werfen. Komme ich dieses Problem falsch an?

Lösung: Wie @ Cj S unten hingewiesen, gab Combobox.SelectedItem den Stunden-Typ zurück, wo ich dachte, dass es Daten von Hour.atime vom Typ DateTime zurückgeben würde. Die gegebene Lösung gab die richtige Information.

Antwort

3

Sie können keine Zeichenfolge in DateTime konvertieren. Verwenden Sie stattdessen DateTime.Parse.

+0

@Cj S. Hat nicht SelectedItem die Valuemember zurück, die hours.atime vom Typ Datetime zurückkehren sollte? Warum sollte es eine Zeichenfolge zurückgeben? –

+0

Komplett auseinandergedacht, ich sah auf ein AJAXControlTookit Problem :-) Wie auch immer, wenn Sie Ihren Debugger in der Zeile, die die Cast-Ausnahme wirft stoppen, sehen Sie, dass die SelectedItem -Eigenschaft eine Instanz von Hour (oder Null, wenn der Benutzer eintritt) ihr eigener Wert in der Combobox). Also bis zu einer Stunde und dann die Zeit abholen. Wie diese 'DateTime StartTime = ((Stunde) comboBox1.SelectedItem) .time; ' –

+0

@ Cj S. Ja! Ich habe das gerade versucht und festgestellt, dass es den Stunden-Typ zurückgibt, aber du hast die Antwort bereits erhalten! Vielen Dank. –

0

Hoppla ...

Ich war völlig falsch. Sie müssen die SelectedValue anstelle die SelectedItem wie folgt erhalten:

DateTime StartTime = (DateTime) comboBox1.SelectedValue; 

Ich glaube, dass Ihr ausgewähltes Element die von der Art ist, Hour und Sie versuchen, es als DateTime ich Ihren Code glauben zu werfen sein sollte somethign wie

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

+0

@ LWK Ich habe versucht, Combobox1.SelectedValue zu verwenden, aber es gab mir immer noch den gleichen Fehler von "Specified Cast ist nicht gültig." –

1

Wenn Sie Ihre Combo DataBinded wird, dann müssen Sie folgendes tun.

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

Wo Priority ist mein Entity Klasse

Verwandte Themen