C#自定义组合框排序

时间:2009-09-04 09:54:02

标签: c# winforms combobox

是否可以在组合框中进行自定义排序/显示顺序?假设我想要在所有其他人之前获得特殊值“Master Value”。

3 个答案:

答案 0 :(得分:4)

以下代码可以解决问题。

  1. 创建要排序的项目的单独列表,然后使用AddRange。

    comboBox1.Items.Add("Master");
    
    List<String> listToSort = new List<String>();
    
    listToSort.Add("6nd");
    listToSort.Add("3nd");
    listToSort.Add("5nd");
    listToSort.Add("4nd");
    listToSort.Add("2nd");
    
    listToSort.Sort();
    
    comboBox1.Items.AddRange(listToSort.ToArray<String>());
    

答案 1 :(得分:4)

创建一个实现IComparable并重写ToString的类,而不是添加字符串。

将该类的实例添加到您的ComboBox

答案 2 :(得分:1)

创建一个数据源作为视图(即存储过程),返回一个值为1的附加字段。

然后获取数据源,并在数据视图中添加一行,附加字段的值为0.

然后按照该字段对视图进行排序,然后按字段的描述进行排序。

这将始终将您的“主值”放在首位,然后按字母顺序对其他值进行排序。

private void PopulateCombo()
{
   // get data view that returns 3 columns, 
   //master sort column set to 1, id, and description //
  DataView view = GetSource();

  // add a new row to the data source that has column values
  // 0 for master sort column (all others are returned 1
  // an appropriate ID and a description
  // data view columns = master sort column, id, description    
  view.Table.Rows.Add(new object[] {0, 1, "MasterValue"});

  // sort first by master column then description //
  view.Sort = "MasterSortColumn ASC, Description ASC"; 

  combo.DataSource = view;
  combo.ValueMember = "Id";
  combo.DisplayMember = "Description";
}