我试图通过使用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,但似乎没有做任何事情。
由于
答案 0 :(得分:1)
从您的代码中排序listBox.Items
而不是people
,而您没有使用people
作为Datasource
的{{1}}:
listBox
这就是为什么你无法使用 //....
people.Add(p);
listBox.Items.Add(p.surname + ", " + p.first_name);
listBox.Sorted = true;
//....
people
从SelectedIndex
获取正确的项目。就像你所做的一样,因为它们没有任何联系:
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));
现在完美运作。