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

时间:2015-06-17 18:05:45

标签: c# asp.net

我正在尝试将数据库中的类别名称列表读入数组列表;然后我将列表绑定到下拉框中。我收到此错误,我不知道如何解决它。请帮忙。感谢

Unable to cast object of type 'System.String' to type 'System.Web.UI.WebControls.ListItem

代码在此行失败:

foreach (ListItem item in arr)

这是我在代码背后的内容

  private void FillDropDownList(DropDownList ddl)
        {
            ArrayList arr = GetDummyData();
            foreach (ListItem item in arr)
            {
                ddl.Items.Add(item);
            }
        }

  private ArrayList GetDummyData()
        {              
            ArrayList arr = new ArrayList();
            string strConn = ConfigurationManager.ConnectionStrings["mycon"].ConnectionString.ToString();
                 SqlConnection con = new SqlConnection(strConn);
            con.Open();
            SqlCommand cmd = new SqlCommand("select distinct ct_name from myTable", con);
            SqlDataReader objDR = cmd.ExecuteReader();

            if (objDR != null)
                while (objDR.Read())
                {
                    //fill arraylist
                    arr.Add(objDR["ct_name"]);
                }
            con.Close();
            return arr;
        }

2 个答案:

答案 0 :(得分:1)

您的ArrayList包含字符串。你的循环尝试将它们作为ListItems进行迭代,它们不是,因此位到处都是。将迭代变量类型更改为' string'

foreach (string item in arr)

BTW:在更现代的代码中,ArrayLists几乎肯定不如List<String>类型更受欢迎。 ArrayLists是一种来自仿制前时代的延续。

答案 1 :(得分:1)

你的ArrayList包含字符串,然后你试图迭代它,好像它里面有ListItem一样。你需要改变你的foreach:

foreach (string item in arr)
{
    ddl.Items.Add(new ListItem(item));
}