2016-03-30 1 views
2

Ich habe diese Fehler auf li nur beim Ausführen, verwende ich Visual Studio.Ich bekomme "Kann nicht umwandeln" Fehler beim Abrufen ausgewählter Elemente in Listbox

Eine nicht behandelte Ausnahme des Typs ‚System.InvalidCastException

Zusätzliche Informationen: Kann nicht das Objekt von Typ‚System.String System.Web.UI.WebControls.ListItem ‚‘ zu geben‘.

private void btnRunReport_Click(object sender, EventArgs e) 
{ 
    rptTopBottom.selDepartment = GetDepartments(); 
} 

private string GetDepartments() 
{ 
    string selDept = ""; 
    foreach (ListItem li in listDepartment.Items) 
    { 
     if (li.Selected) 
     { 
      selDept += li.Value + ','; 
     } 
    } 
    selDept = selDept.Substring(0, selDept.Length - 1); 
    return selDept; 
} 
+0

, was der Code Zeile bricht auf? Irgendwo, wo Sie versuchen, eine 'String' zu verwenden, als wäre es ein' ListItem' – Alex

+0

, ist das Winforms oder ASP.NET? –

+0

Winforms @CasparKleijne – FatalError

Antwort

1

Die Ausnahmemeldung

Kann Objekt des Typs 'System.String' to cast 'System.Web.UI.WebControls.ListItem' einzugeben.

zeigt an, dass diese Linie

foreach (ListItem li in listDepartment.Items) 

das Scheitern ist, weil listDepartment.Items scheint Elemente vom Typ enthalten string statt Typ System.Web.UI.WebControls.ListItem.

Sie verwenden eine System.Windows.Forms.ListBox. Diese Listenfeldeigenschaft Items ist eine Objektgruppe, die genau die Objekte enthält, die Sie hinzugefügt haben. Es enthält keine System.Web.UI.WebControl.ListItem s.

Sie sollten die stattdessen ListBox.SelectedItems Eigenschaft:

foreach (string s in listDepartment.SelectedItems) 
    selDept += s + ','; 
+0

es funktionierte, aber es sagt Prozedur oder Funktion hat zu viele Argumente in meinem Berichtsformular angegeben. – FatalError

+1

Nun, ich kenne Ihre Berichtsform nicht oder zu welcher Methode Sie zu viele Argumente übergeben. Klingt wie eine neue Frage, also könntest du eine neue Frage dafür öffnen. –

+0

Danke ich habe gerade vergessen, sql Stored Procedure einzuschließen .. Es ist jetzt ok yay !! – FatalError