如何在数据绑定模式下按降序对ListBox进行排序?

时间:2017-01-03 11:52:46

标签: c# sorting listbox

如何在数据绑定模式下按降序对ListBox进行排序?

我举个例子:

System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
ArrayList paperSizes = new ArrayList();

for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++)
{
   paperSizes.Add(printDoc.PrinterSettings.PaperSizes[i]);
}

listBox1.DataSource = paperSizes;
listBox1.DisplayMember = "PaperName";
listBox1.ValueMember = "Kind";

3 个答案:

答案 0 :(得分:1)

使用 paperSizes.sort(paperSizes);

System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
ArrayList paperSizes = new ArrayList();

for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++)
{
   paperSizes.Add(printDoc.PrinterSettings.PaperSizes[i]);
}
paperSizes.sort();
listBox1.DataSource = paperSizes;
listBox1.DisplayMember = "PaperName";
listBox1.ValueMember = "Kind";

答案 1 :(得分:0)

您可以尝试以下代码:

private void SortListBoxItems(ref ListBox lb)
{
    List<object> items;
    items = lb.Items.OfType<object>().ToList();
    lb.Items.Clear();
    lb.Items.AddRange(items.OrderByDescending(i => i).ToArray());
}

答案 2 :(得分:0)

我还没有得到建设性的答案和优雅的解决方案。但是在Rai和NicoRiff的帮助下,我意识到我们无法在数据绑定模式上做更多的事情,可能,我应该在数据绑定之前进行排序。我获得的另一件事是我应该放置Try and Catch以避免无提示崩溃并提供错误信息,以防万一在数据绑定模式下意外调用ListBox.Sorted = true或ListBox.Items.Add方法。

1. In Rai's code sample, when we call paperSizes.sort(), VS catch error "Failed to compare two elements in the array."
2. in Nico's code sample, because ListBox is on data-binding mode, VS will raise an error "Items collection cannot be modified when the DataSource property is set."