如何在数据绑定模式下按降序对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";
答案 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."