所选索引和排序方法没有协同作用
本文关键字:作用 方法 索引 排序 | 更新日期: 2023-09-27 18:24:17
我正试图通过使用Listbox对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,但似乎没有任何作用。
感谢
从您的代码中,您对listBox.Items
而不是people
进行排序,并且您没有将people
用作listBox
:的Datasource
//....
people.Add(p);
listBox.Items.Add(p.surname + ", " + p.first_name);
listBox.Sorted = true;
//....
这就是为什么使用listbox
的SelectedIndex
无法从people
中获得正确的项目。就像你所做的,因为它们无论如何都没有链接:
surnameTxt.Text = people[listBox.SelectedIndex].surname;
相反,您可以设置listBox.DataSource=people
,只对people
进行排序。
请注意,当列表绑定到DataSource
:时,不应该使用ListBox.Sorted
属性对列表进行排序
Sorted设置为true的ListBox不应使用DataSource属性绑定到数据。要在绑定的ListBox中显示排序后的数据,您应该绑定到支持排序的数据源,并让数据源提供排序。
而不是使用listBox.Sorted = true;
我通过使用对实际列表进行排序;
people.Sort((x, y) => string.Compare(x.surname, y.surname));
现在效果很好。