2016-06-21 5 views
-1

0th indexの項目を除き、combo boxの項目を並べ替える必要があります。私が思ったロジックは、最初の値をいくつかの文字列に格納していました。次に、combo boxのアイテムの並べ替えを適用します。その後、アイテムは0th indexに格納され、別のインデックスから削除されます。しかし、これは私の必要条件のための適切な解決策ではありません。C#最初のコンボボックス以外の項目を並べ替え

string str = cmbItems.Items[0].ToString(); 
cmbItems.Sorted = true; 
cmbItems.Items.Insert(0, str); 

しかし、上記の方法で、0番目のインデックスに追加のではありません。代わりにソートされた位置。

+6

なぜそれがない - ここ

は、コードのですか?そのアプローチに何が問題なのですか? – Sayse

+0

[mcve]を提供してください – Mafii

+2

あなたの質問には、いくつかのコードを追加することで間違いなく恩恵を受けるでしょう... – ardila

答えて

3

まあ、自分の質問に答える。見つからないことは、並べ替え後にSortプロパティのcombo boxを無効にすることでした。 combo boxの並べ替えがtrueの場合、それ以上の項目についてはtrueのままでソートモードで追加するためです。 ソートが完了したら、それをfalseにして、0番目のインデックスに格納された項目を追加します。

string str = cmbItems.Items[0].ToString(); 
cmbItems.Items.RemoveAt(0); 
cmbItems.Sorted = true; // Sort the items 
cmbItems.Sorted = false; // Disable the sorting 
cmbItems.Items.Insert(0, str); 
+0

偉大な答え! –

0

どのUIを使用しますか? たとえば、あなたがのObservableCollectionにMVVMとストアアイテムを使用する場合は、このソリューションはappliable

ObservableCollecton<Item> Items 
{ 
    get{ this._items; } 
    set{ 
    if (this._items != value) 
    { 
     this._items = value; 
     NotifyPropertyChanged(()=>Items); 
    } 
    } 
} 

void Sort() 
{ 
    var temp = new ObservableCollection<Item>(Items.Take(1).Union(Items.Skip(1).OrderBy(item => item.Id))); 
    Items = temp; 
} 
+1

ようこそ。 OPが何を使用していると仮定しないでください。コメントをお願いします – ardila

+1

@ardilaこれはいいかもしれません。その実例は、GUIフレームワークopが何を使用しているかにかかわらずです。 WPF/MVVMでない場合は、コードを抽出して別の場所で使用する必要があります。 – Mafii

+1

@Mafi私は同意しません。有意義な答えが得られるほど、明確かつ具体的な問題ではありません。これはコメントのためのもので、明確化を求めることです。問題が後で洗練され、OPがMVVMを使用していないことが判明した場合、この答えは役に立ちません。 – ardila

0

かもしれあなたがソート(比較)を使用することができますList.Sort Method (Comparison)

あなたはすべての前にあることを0番目のインデックス付き値を、その後を設定することができます他の文字列。

関連する問題