2015-10-18 100 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的工作,但我无法让它看起来我想要的方式。 –