1

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

しかし、上記の何が問題なのかをデバッグした後、私のコントロールは空ですか?

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および as として使用するかを定義するだけです。ValueMember

そして、あなたがそれをしている間 - あなたが必要IDとするだけでShape、そのテーブルから -あなたSELECT!

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

本当に必要な列が 2 つだけの場合、すべての列を取得しても意味がありません...

于 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 に答える