从表中获取结果,将它们存储在数组中,然后显示它们
本文关键字:数组 显示 然后 存储 获取 结果 | 更新日期: 2023-09-27 18:23:46
我已经尝试解决这个问题很长一段时间了,但我可以理解这里的确切问题。我有一张表,上面有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",但列表框中的第一个条目在选中时不会显示任何信息,而其他条目则会显示。
关于如何解决这个问题,有什么帮助吗?
谢谢!
ListBox
将显示您使用该对象的ToString()
方法放入其中的任何对象。如果不重写此方法,它将返回自定义类的类名。事情就是这样。
您需要决定要显示什么。首先使用listBox1.Items.Add(b.surname);
查看您的数据是否存在。使用格式字符串可以产生更好的结果,或者使用ListView
为数据设置列。
我认为你的问题在这里:
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)
{