4

我有以下代码。

我正在尝试将值插入列表框中,然后能够按字母顺序排列这些值并将它们重新显示在同一个列表框中。由于某种原因,代码不起作用(没有错误 - 就在我按下按钮时,列表框会清除)

protected void sortButton_Click(object sender, ImageClickEventArgs e)
{
    string[] movieArray = new string [cartListBox.Items.Count];

    for (int i = 0; i < cartListBox.Items.Count; i++)
    {
        movieArray[i] = cartListBox.Items[i].ToString();
    }

    Array.Sort(movieArray);

    cartListBox.Items.Clear();

    for (int i = 0; i < cartListBox.Items.Count; i++)
    {
        cartListBox.Items.Add(movieArray[i].ToString());
    }

}
4

4 回答 4

10

我认为问题出在最后一个循环中。

这样做如下:

cartListBox.Items.Clear();

    for (int i = 0; i < movieArray.Length; i++)
    {
        cartListBox.Items.Add(movieArray[i].ToString());
    }

清除cartListBox.Items.Clear();时,不应将其用于循环计数器,例如,for (int i = 0; i < cartListBox.Items.Count; i++)

cartListBox.Items.Count正在制造问题。

于 2013-05-23T11:07:42.557 回答
1

通过以更现代的方式执行此操作,您可以避免所有循环和错误:

var items = cartListBox.Items
    .Select(item => item.ToString())
    .OrderBy(x => x);

cartListBox.Items.Clear();

cartListBox.Items.AddRange(items);
于 2013-05-23T11:10:36.583 回答
0
cartListBox.Items.Count // is 0 length

您在上一步中正在执行的操作:

cartListBox.Items.Clear(); 
于 2013-05-23T11:09:31.000 回答
0

要将 movieArray 添加到列表框,请使用 AddRange

  • carListBox.Items.AddRange(movieArray);

排序只需设置 sorted =true

  • carListBox.Sorted=true;

完整代码如下

  • carListBox.Items.AddRange(movieArray);
  • carListBox.Sorted=true;
于 2020-03-13T15:47:48.047 回答