如何填写listBox控件?

我从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(); } 

但调试之后我的控件是空的,知道上面有什么问题?

对不起 – 我太过于使用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

当你在它的时候 – 如果你只需要Shape表中的IDShape – 在你的SELECT 这样说吧

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

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

使用以下代码:

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

您必须使用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(); } } }