我从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();
}
但是在调试了上面有什么问题后,我的控件是空的?
答案 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
),以及每个项目的哪个属性用作DisplayMember
和ValueMember
当你在这里时 - 如果你只需要来自该表的ID
和Shape
- 这么说在你的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();
}
}
}