2014-09-20 64 views
1

我一直在嘗試解決這個問題很長一段時間,但是我可以圍繞什麼確切問題在這裏。 我有一個ID,first_name和姓氏的表。我試圖從該表中拉出一行,將其存儲在數組中,然後將其顯示在列表框中。這是我得到的從表中獲取結果,將它們存儲在數組中然後顯示它們

 public Contacts[] getAllContacts() 
    { 
     List<Contacts> theContactList = new List<Contacts>(); 

     try 
     { 

      conn = new MySqlConnection(cs); 
      conn.Open(); 

      string stm = "select id, first_name, surname from contacts"; 
      MySqlCommand cmd = new MySqlCommand(stm, conn); 
      rdr = cmd.ExecuteReader(); 

      while (rdr.Read()) 
      { 
       Contacts theContact = new Contacts(); 
       theContact.contactID = rdr.GetInt32("id"); 
       theContact.first_name = rdr.GetString("first_name"); 
       theContact.surname = rdr.GetString("surname"); 

       theContactList.Add(theContact); 

      } 
     } 
     catch (MySqlException ex) 
     { 
      System.Diagnostics.Debug.WriteLine("Error: {0}", ex.ToString()); 
     } 
     finally 
     { 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 

      if (conn != null) 
      { 
       conn.Close(); 
      } 

     } 
     if (theContactList.Count > 0) 
     { 
      return theContactList.ToArray(); 
     } 
     else 
     { 
      return null; 
     } 
    } 

這是我用來拉值的方法,現在在另一個類中,我使用它來顯示值到列表框中。

 ContactManager contactMan = new ContactManager(); 
    public Form1() 
    { 
     InitializeComponent(); 
     reloadContacts(); 
    } 




    private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (listBox1.SelectedIndex > 0) 
     { 
      Contacts currentContact = (Contacts)listBox1.SelectedItem; 

      textBox1.Text = currentContact.contactID.ToString(); 
      textBox2.Text = currentContact.surname; 
      textBox3.Text = currentContact.first_name; 


     } 
    } 

    private void reloadContacts() 
    { 
     listBox1.Items.Clear(); 
     Contacts[] allContacts = contactMan.getAllContacts(); 


     foreach (Contacts b in allContacts) 
     { 
      listBox1.Items.Add(b); 

     } 

} 

現在真正讓我困惑的是顯示內容。我一直在改變我的桌子,我發現在列表框中它會爲每一行顯示「ProjectName.Contacts」,但列表框中的第一項在選中時不會顯示任何信息,而別人呢。

如何解決此問題的任何幫助?

謝謝!

回答

1

ListBox將通過使用該對象的ToString()方法顯示您放入其中的任何對象。如果您不重寫此方法,它將返回自定義類的類名稱。這是發生了什麼事。

您需要決定要顯示的內容。首先使用listBox1.Items.Add(b.surname);來查看您的數據是否存在。使用格式字符串以產生更好的結果,或使用ListView來爲您的數據添加列。

+0

謝謝,我添加了一個重寫方法,因爲我想用這個listBox玩一下。 – CodingNub 2014-09-20 08:52:29

1

我覺得你的問題是在這裏:

if (listBox1.SelectedIndex > 0) 
{ 
    Contacts currentContact = (Contacts)listBox1.SelectedItem; 

    textBox1.Text = currentContact.contactID.ToString(); 
    textBox2.Text = currentContact.surname; 
    textBox3.Text = currentContact.first_name; 
} 

的SelectedIndex = -1是不選。 0是第一個元素。嘗試:

if (listBox1.SelectedIndex != -1) 
{ 
+0

謝謝,我只是將它改爲> -1,這應該提供與!= -1相同的結果,對嗎? – CodingNub 2014-09-20 08:48:08

+0

是的 - 沒有什麼情況下可以以-2結束 – 2014-09-20 09:02:32

相關問題