如何填写listBox控件?

时间:2012-12-30 09:12:31

标签: c# .net winforms

我从DB获取数据:

        SqlCommand cmd = new SqlCommand("SELECT * FROM ItemShape", conn);

        conn.Open();

        SqlDataReader reader = cmd.ExecuteReader();

我需要用回收的数据填充我的控件,如下所示:

         foreach (DataRow item in dt.Rows)
        {
           lbxObjects.DisplayMember = item["Shape"].ToString();
           lbxObjects.ValueMember = item["ID"].ToString();
        } 

但是在调试了上面有什么问题后,我的控件是空的?

3 个答案:

答案 0 :(得分:3)

抱歉 - 我太过于使用ASP.NET,我的第一种方法可行 - 但在Winforms中,它没有..

你可以使用这样的东西 - 将数据加载到DataTable(这样你的控件可以获得所有数据)并绑定:

using (SqlCommand cmd = new SqlCommand("SELECT * FROM ItemShape", conn))
{
    SqlDataAdapter dap = new SqlDataAdapter(cmd);
    DataTable tblShapes = new DataTable();
    dap.Fill(tblShapes);

    // define Display and Value members
    lbxObjects.DisplayMember = "Shape";
    lbxObjects.ValueMember = "ID";

    // set the DataSource to the DataTable 
    lbxObjects.DataSource = tblShapes;
}

这样,您不必手动迭代列表 - Listbox类将为您执行此操作!您只需要定义要绑定的项目集合(通过设置DataSource),以及每个项目的哪个属性用作DisplayMemberValueMember

当你在这里时 - 如果你只需要来自该表的IDShape - 这么说在你的SELECT

using (SqlCommand cmd = new SqlCommand("SELECT ID, Shape FROM ItemShape", conn))
{

如果您真的只需要其中两个,那么检索所有列是没有意义的......

答案 1 :(得分:1)

使用以下代码:

while (dataReader.Read())
          {
            object ID = dataReader["ID"];
            object shape = dataReader["shape"];
            lbxObjects.Items.Add(ID.ToString() + ": " +  shape.ToString());
          }

答案 2 :(得分:1)

您必须使用reader作为列表框的数据源

using( SqlCommand cmd = new SqlCommand("SELECT * FROM ItemShape", conn))
    {
          conn.Open();
          using(SqlDataReader reader = cmd.ExecuteReader())
          {
              if(reader.Read())
              {
                   lbxObjects.Text= item["Shape"].ToString();
                   lbxObjects.Value= item["ID"].ToString();
                   lbxObjects.DataSource=reader;
                   lbxObjects.DataBind();
              }
           }
    }