选定的指数和分类方法没有协同作用

时间:2014-09-25 09:27:09

标签: c# visual-studio-2010

我试图通过使用listBox.Sorted = true;

对我的列表框中的列表进行排序

这个问题是,如果我要选择列表中的第四个东西,它会选择第四个插入的东西,而不是排序后的第四个东西。

所以我认为listBox.Sorted只是排序实际显示的内容,而不是它背后的原始列表。

        private void Form1_Load()
    {
        XmlDocument xDoc = new XmlDocument();

            xDoc.Load(path + "\\contactz\\testing.xml");
            foreach (XmlNode xNode in xDoc.SelectNodes("People/Person"))
            {
                Person p = new Person();
                p.surname = xNode.SelectSingleNode("surname").InnerText;
                p.first_name = xNode.SelectSingleNode("first_name").InnerText;
                p.street_address = xNode.SelectSingleNode("street_address").InnerText;
                p.postcode = xNode.SelectSingleNode("postcode").InnerText;
                p.suburb = xNode.SelectSingleNode("suburb").InnerText;
                p.email = xNode.SelectSingleNode("email").InnerText;
                p.phone = xNode.SelectSingleNode("phone").InnerText;
                p.mobile_phone = xNode.SelectSingleNode("mobile_phone").InnerText;
                people.Add(p);
                listBox.Items.Add(p.surname + ", " + p.first_name);
                listBox.Sorted = true;

        }


        private void listBox_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (listBox.SelectedIndex > -1)
        {
            surnameTxt.Text = people[listBox.SelectedIndex].surname;
            firstnameTxt.Text = people[listBox.SelectedIndex].first_name;
            addressTxt.Text = people[listBox.SelectedIndex].street_address;
            suburbTxt.Text = people[listBox.SelectedIndex].suburb;
            postcodeTxt.Text = people[listBox.SelectedIndex].postcode;
            emailTxt.Text = people[listBox.SelectedIndex].email;
            phoneTxt.Text = people[listBox.SelectedIndex].phone;
            mobileTxt.Text = people[listBox.SelectedIndex].mobile_phone;

        }
    }

删除了许多不必要的代码,因此看起来有点时髦。

我尝试在几个点将listBox.topIndex设置为0,但似乎没有做任何事情。

由于

2 个答案:

答案 0 :(得分:1)

从您的代码中排序listBox.Items而不是people,而您没有使用people作为Datasource的{​​{1}}:

listBox

这就是为什么你无法使用 //.... people.Add(p); listBox.Items.Add(p.surname + ", " + p.first_name); listBox.Sorted = true; //.... peopleSelectedIndex获取正确的项目。就像你所做的一样,因为它们没有任何联系:

listbox

相反,您可以设置 surnameTxt.Text = people[listBox.SelectedIndex].surname; ,然后对listBox.DataSource=people进行排序。

请注意,当列表绑定到people时,您不应使用ListBox.Sorted属性对列表进行排序:

  

将Sorted设置为true的ListBox不应使用DataSource属性绑定到数据。要在绑定的ListBox中显示已排序的数据,您应该绑定到支持排序的数据源,并让数据源提供排序。

答案 1 :(得分:0)

而不是使用listBox.Sorted = true;

我选择使用;

对实际列表进行排序
people.Sort((x, y) => string.Compare(x.surname, y.surname));

现在完美运作。