2015-10-18 107 views
0

我試圖用C#和MySQL數據庫進行通訊錄。我正在嘗試使用標籤並將LabelText設置爲數據庫信息。我爲我的標籤使用了FlowLayoutPanel。我只能獲取1人的信息,我希望數據庫中的所有人都能在輸出中列出。我究竟做錯了什麼?通過MySQL表遍歷

MySqlCommand cmd = cnn.CreateCommand(); 
cmd.CommandText = "SELECT first_name, last_name, street, city, state, zip, phone, email From address_book ORDER BY last_name, first_name"; 
try 
{ 
    cnn.Open(); 
    MySqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     lblFirstName.Text = reader.GetString("first_name") + " " + reader.GetString("last_name"); 
     lblStreet.Text = reader.GetString("street"); 
     lblCityStateZip.Text = reader.GetString("city") + ", " + reader.GetString("state") + " " + reader.GetString("zip"); 
     lblPhone.Text = reader.GetString("phone"); 
     lblEmail.Text = reader.GetString("email"); 
    }   
    cnn.Close(); 
} 
+1

您只有一組UI元素,並且您正在重複寫入該組。無論您使用的是哪種UI技術,您都需要某種類型的中繼器或列表或網格UI組件,它可顯示*多個*記錄。您只能使用一個標籤不能顯示多個記錄。 – David

+0

是@David是正確的,您需要一些中繼器或網格來顯示基於您的查詢中的行數。 –

+0

您可能有一個FlowLayoutPanel,但像'lblFirstName'這樣的控件不知道它們在什麼容器中。 –

回答

0

我想出瞭如何編寫我想要的代碼。我在FlowLayoutPanel上使用label來寫入MySQL表中的所有條目。這不是來自工具箱的Windows窗體Label。它將從數據庫重複寫入label,並且flowLayoutPanel會將每個新輸出一個接一個地放入panel

cnn.Open(); 
      MySqlDataReader reader = cmd.ExecuteReader(); 
      Label lblName; 
      while (reader.Read()) 
      { 

       lblName = new Label(); 
       lblName.Text = reader.GetString("first_name") + " " + reader.GetString("last_name") + " \r\n" 
       + reader.GetString("street") + " \r\n" 
       + reader.GetString("city") + ", " + reader.GetString("state") + " " + reader.GetString("zip") + " \r\n" 
       + reader.GetString("phone") + " \r\n" 
       + reader.GetString("email"); 
       lblName.Width = 200; 
       lblName.Height = 90; 
       flowLayoutPanel1.Controls.Add(lblName); 
      } 

      cnn.Close(); 
0

你只可以看到標籤上的最後檢索記錄,因爲每一次的下一個檢索的記錄改寫LabelTextwhile循環。如果你想顯示所有檢索到的記錄,你應該使用DataGridView。就像這樣:

SqlDataAdapter da = new SqlDataAdapter("SELECT first_name, last_name, street, city, state, zip, phone, email From address_book ORDER BY last_name, first_name", con); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0]; 
+0

我需要更多關於如何使用它的信息。在Java中使用循環中的標籤效果很好,但我不瞭解如何在c#中執行此操作。 SqlDataAdapter帶下劃線,它表示「無法找到類型或名稱空間'SqlDataAdapter'」,dataGridview1帶下劃線並且顯示「名稱dataGridView1在當前上下文中不存在」。 –

+0

@DaleWahl ...您應該從工具箱中將「DataGridView」添加到您的表單中。同時添加'使用System.Data.SqlClient;'來使用指令。 –

+0

我想出瞭如何在循環中使用標籤,它與Java非常相似。我得到DataGridView的工作,但我無法讓它看起來我想要的方式。 –