【问题标题】:How to sort items in listbox如何对列表框中的项目进行排序
【发布时间】:2014-08-28 14:52:53
【问题描述】:

我是编程新手,我需要一些帮助来对列表框中的项目进行排序 我有一个循环代码,它在 listbox1 上添加项目我想要的是将项目按降序排序到另一个列表框中。 例如,listbox 1 的输出是 3,6,9 到 39,排序后的降序列表将转到 listbox2。

int thingsforlist;
do{
     listbox.item.add(thingsforlist); 
     thingsforlist = thingforlist+3;
  }
while (thingsforlist<=39);

【问题讨论】:

    标签: c# sorting listbox listboxitems


    【解决方案1】:

    使用此功能,您可以对列表框中的项目进行降序或升序排序。

    Private Sub sortListBoxItems(ByRef lb As ListBox, ByVal ascending As Boolean)
        Dim items As List(Of Object)
        items = lb.Items.OfType(Of Object)().ToList()
        lb.Items.Clear()
        If ascending Then
            lb.Items.AddRange(items.OrderBy(Function(i) i).ToArray())
        Else
            lb.Items.AddRange(items.OrderByDescending(Function(i) i).ToArray())
        End If
    End Sub
    

    或者如果你更喜欢 C#,

    private void sortListBoxItems(ref ListBox lb, bool ascending)
    {
        List<object> items;
        items = lb.Items.OfType<object>().ToList();
        lb.Items.Clear();
        if (ascending)
        { lb.Items.AddRange(items.OrderBy(i => i).ToArray()); }
        else
        { lb.Items.AddRange(items.OrderByDescending(i => i).ToArray()); }
    }
    

    【讨论】:

    • 我认为这段代码是在 C++ 上的,但我会尝试理解这段代码的语法:)。我还没有学过C和C++,我是从C#开始的
    • @JohnKënnëthIglesia 这是 VB.Net 代码。我假设这个答案在你明确使用 C# 之前就已经出现了。
    • 原来你也把vb.net放在你的标签里了。
    • 因为这不是一个 VB.Net 问题,人们需要明白它们不是一回事。评论不是这个讨论的地方。接受 Meta。
    • 谢谢你们,它现在可以工作了。:)。我真的很抱歉放置 vb.net 标签
    【解决方案2】:

    我本来打算建议一个 linq 排序,然后我只是想,你在 3s 中添加数字......只需反向执行,然后从你想要结束的地方开始并向后工作。

    int thingsforlist = 39;
    do
    {
        listbox.item.add(thingsforlist);
        thingsforlist -= 3;
    }
    while (thingsforlist > 0);
    

    如果你有某种可排序的对象,你可以使用 linq 和 OrderByDescending 但我认为你的情况看起来你不需要至少根据你提供的代码 sn-p 进入。

    编辑:如果您要绑定一些有序数据,这是另一种选择:

    List<int> yourItems = new List<int>();
    int thingsforlist = 0;
    do
    {
        yourItems.Add(thingsforlist);
        thingsforlist += 3;
    }
    while (thingsforlist <= 39);
    
    listbox.DataSource = yourItems.OrderByDescending(i => i);
    listbox.DataBind();
    

    【讨论】:

    • 感谢您的回复。我会做你给我的同样的事情,但我在想我是否可以用其他方式来做,比如按降序对项目进行排序。
    • @JohnKënnëthIglesia 您需要以可以存储它们的方式存储这些项目。目前,您只是增加一个整数,因此在将它们添加到 ListBox 之前,这些值不存在进行排序,因此您需要提取项目,然后对它们进行排序并重新添加它们或从头开始生成它们到一个对象中您可以排序,然后排序,然后将它们添加到列表框中。
    • 感谢您的帮助,我将尝试了解您给我的代码的所有功能。 listbox.DataSource = yourItems.OrderByDescending(i => i); listbox.DataBind();
    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多