2016-06-21 45 views
-1

我需要對項目combo box進行分類,但0th index的項目除外。我認爲的邏輯是在一些字符串中存儲第一個值。然後應用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

那麼,回答我自己的問題。缺少的東西是排序後禁用排序屬性combo box。因爲如果對combo box的排序是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

歡迎來到SO。不要假設OP使用什麼。在評論中提問 – ardila

+1

@ardila這可能是好的。它是一個工作示例,無論使用哪種GUI框架。如果不是WPF/MVVM – Mafii

+1

@Mafi我不同意,他只需提取代碼並在其他地方使用它。這個問題並不十分清楚和具體,因爲它可以有效回答。這是什麼意見,要求澄清。如果問題稍後得到了改進,並且事實證明OP不*使用MVVM,那麼這個答案就沒用了。 – ardila

相關問題