1

我从数据库获取数据:

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

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

4

3 回答 3

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),以及每个项目的哪个属性使用 asDisplayMember和 asValueMember

当你在它的时候——如果你只需要ID并且从那张Shape桌子上——在你的!SELECT

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

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

于 2012-12-30T09:22:00.340 回答
1

使用以下代码:

while (dataReader.Read())
          {
            object ID = dataReader["ID"];
            object shape = dataReader["shape"];
            lbxObjects.Items.Add(ID.ToString() + ": " +  shape.ToString());
          }
于 2012-12-30T09:18:43.887 回答
1

您必须使用阅读器作为列表框的数据源

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();
              }
           }
    }
于 2012-12-30T09:44:40.947 回答