2017-01-03 10 views
0

データバインディングモードで降順で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"; 

答えて

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()); 
} 
+0

「データソースプロパティが設定されているとアイテムコレクションを変更できません」というエラーが発生する – qtg

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"; 
+0

Collections.sort(paperSizes)とは何ですか?降順で並べ替える必要があります。エラーが発生しました{"配列内の2つの要素を比較できませんでした。"} call paperSizes.Sort(); – qtg

+0

ソートする前に種類の種類を取得する必要があります。printDoc.PrinterSettings.PaperSizes [i] .Kind.ToString() –

+0

Kindをロードするだけで、ArrayListを並べ替えることができ、ListBoxも並べ替えることができます。しかし、私の質問は、データバインディングモードでListBoxをソートする方法です。 – qtg

0

まだ建設的な答えと優雅な解決策がありません。しかし、RaiとNicoRiffの助けを借りれば、Data-Bindingモードではそれ以上のことはできないことに気付きました。データバインディングの前にソートする必要があります。私が得たもう一つのことは、サイレントクラッシュを回避し、データバインディングモードでListBox.Sorted = trueまたはListBox.Items.Addメソッドを誤って呼び出すと、エラー情報を提供するためにTry and Catchを配置する必要があるということです。

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." 
関連する問題