使用窗口形式C#排序负值

时间:2013-11-10 14:00:05

标签: c# winforms

我是新手为窗体编写C#程序。当我使用 {Detail_ListBox.Sorted = true;按升序排序我的ListBox,但我得到的不是我想要的 -1
-2
-3
 0
 1
 2
 3

它能够对正值进行排序,但我想对负值进行排序。正值成为
-3
-2
-1
0
1
2
3
这只是一个例子,实际值可以包括从-300到+300。 任何人都可以帮助我,我应该使用哪些陈述来排序-ve和amp; + ve值?

3 个答案:

答案 0 :(得分:1)

使用{Detail_ListBox.Sorted = true;它对像string这样的值进行排序。您应该首先对int值进行排序,然后将它们放入ListBox而不使用Detail_ListBox.Sorted = true;

答案 1 :(得分:0)

如果你有一个整数列表,如下:

List<int> integers = somelist;

您可以使用以下方式对其进行排序:

integers.Sort();

然后分配到列表框:

Detail_ListBox.DataSource = integers;

或者:

Detail_ListBox.Items = integers.Select(x => x.ToString()).ToArray();

答案 2 :(得分:0)

如果您的ListBox有一些DataSource,您可以尝试对DataSource进行排序。如果没有,您可以尝试这种扩展方法:

public static class ListBoxExtension
{
    public static void SortBy<TElement>(this ListBox list,
                              Func<TElement, object> fieldSelector)
    {
        var items = list.Items.OfType<TElement>()
                        .OrderBy(fieldSelector)
                        .Cast<object>().ToArray();
        list.BeginUpdate();
        list.Items.Clear();
        list.Items.AddRange(items);
        list.EndUpdate();
    }
    public static void SortByDescending(this ListBox list,
                                        Func<TElement, object> fieldSelector)
    {
        var items = list.Items.OfType<TElement>()
                        .OrderByDescending(fieldSelector)
                        .Cast<object>().ToArray();
        list.BeginUpdate();
        list.Items.Clear();
        list.Items.AddRange(items);
        list.EndUpdate();
    }           
}

//Usage
listBox1.SortBy<object>(x=>x);
//if your listBox1 has elements of the same type Item, use it like this:
listBox1.SortBy<Item>(x=>x.SomeProperty);