如何填写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
),以及每个项目的哪个属性用作DisplayMember
和ValueMember
当你在它的时候 – 如果你只需要Shape
表中的ID
和Shape
– 在你的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(); } } }