从表中获取结果,将它们存储在数组中,然后显示它们

本文关键字:数组 显示 然后 存储 获取 结果 | 更新日期: 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)
{