2012-12-30 31 views
1

我從數據庫獲取數據:如何填寫listBox控件?

 SqlCommand cmd = new SqlCommand("SELECT * FROM ItemShape", conn); 

     conn.Open(); 

     SqlDataReader reader = cmd.ExecuteReader(); 

,我需要填補我的控制與recived數據,就像這樣:

  foreach (DataRow item in dt.Rows) 
     { 
      lbxObjects.DisplayMember = item["Shape"].ToString(); 
      lbxObjects.ValueMember = item["ID"].ToString(); 
     } 

但是在調試任何想法有什麼不對後我的控制是空的以上?

+0

你怎麼看到的數據源當你在'foreach'行上放置一個斷點? –

+0

來自DataBase的記錄 – Michael

回答

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

雖然你在它 - 如果你只需要IDShape從那張表 - 這麼說在您的SELECT

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

有在檢索沒有點中的所有列,如果你真的只需要兩個人......

+1

Tnx marc手動填充列表框,這是工作! – Michael

1

使用下面的代碼:

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

它不是一個好的方式來填充列表框 –

+0

一般來說,我同意,在這種情況下,有必要設置listBox的DataSource屬性。無論如何,我決定展示如何通過迭代DataReader – platon

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

這個**不**在Winforms中工作 - 只是自己試了一下。列表框保持空白。你需要將整個數據加載到一個'DataTable'中或者迭代你自己。在ASP.NET中,調用'.DataBind()'會爲你做這件事 - 不是在Winforms中,但是... –

+0

沒關係,thanx給這個學習.. –