【问题标题】:I'm getting "Unable to cast" error on getting selected items on listbox在列表框中获取选定项目时出现“无法投射”错误
【发布时间】:2016-03-30 10:12:25
【问题描述】:

我只有在运行时才会在 li 上出现这些错误,我正在使用 Visual Studio。

“System.InvalidCastException”类型的未处理异常

附加信息:无法将“System.String”类型的对象转换为“System.Web.UI.WebControls.ListItem”类型。

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

【问题讨论】:

  • 代码在哪一行中断?在某个地方您尝试使用String,就好像它是ListItem
  • 这是 winforms 还是 ASP.NET?
  • Winforms @CasparKleijne
  • 你能显示 rptTopBottom 吗?
  • WinForms 不存在 ListItem,Winforms 中的 listDepartment.Items 不返回 Listitem 而是返回对象

标签: c# visual-studio listbox


【解决方案1】:

异常信息

无法将“System.String”类型的对象转换为“System.Web.UI.WebControls.ListItem”类型。

表示这一行

foreach (ListItem li in listDepartment.Items)

失败是因为listDepartment.Items 似乎包含string 类型的元素,而不是System.Web.UI.WebControls.ListItem 类型。

您使用的是System.Windows.Forms.ListBox。此列表框的Items 属性是一个对象集合,其中包含您添加的对象。它不包含System.Web.UI.WebControl.ListItems。

您应该改用ListBox.SelectedItems 属性:

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

【讨论】:

  • 它有效,但它说过程或函数在我的报告表单上指定了太多参数。
  • 好吧,我不知道您的报告表格或您传递太多参数的方法。听起来像是一个新问题,因此您可以为此提出一个新问题。
  • 谢谢,我只是忘了包含 sql 存储过程。现在可以了!!
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2019-07-14
  • 2016-03-01
相关资源
最近更新 更多