C#自定义组合框排序
在combox中是否可以自定义排序/显示顺序?假设我想要一个特殊的值“MasterValue”,在所有其他值之前。下面的代码将完成此操作C#自定义组合框排序,c#,winforms,combobox,C#,Winforms,Combobox,在combox中是否可以自定义排序/显示顺序?假设我想要一个特殊的值“MasterValue”,在所有其他值之前。下面的代码将完成此操作 创建要排序的项目的单独列表,然后使用AddRange comboBox1.Items.Add("Master"); List<String> listToSort = new List<String>(); listToSort.Add("6nd"); listToSort.Add("3nd"); listToSort.Add("5
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>());
comboBox1.Items.Add(“主控”);
List listToSort=新列表();
列表排序。添加(“第6条”);
listToSort.Add(“3nd”);
列表排序。添加(“第5条”);
列表排序。添加(“第4条”);
列表排序。添加(“第二次”);
listToSort.Sort();
comboBox1.Items.AddRange(listToSort.ToArray());
创建一个实现IComparable并重写ToString的类,而不是添加字符串
将该类的实例添加到组合框中创建一个数据源作为视图(即存储过程),该视图返回值为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";
}
好的,但我仍然希望“MasterValue”作为显示值,并根据所有对象的ToString()值进行排序,但“MasterValue”应位于顶部。你的答案会起作用吗?@Duaner:这个想法是组合框对调用IComparable接口的CompareTo函数的元素进行排序。您需要做的是围绕String类创建一个包装器。ToString返回组合框中所需的字符串,CompareTo确保您具有所需的顺序。如果字符串是“MasterValue”,则CompareTo始终返回<0,因此“MasterValue”始终是第一个。这在.NET3.5中对我不起作用。System.Windows.Forms.ComboBox有其内部ItemComparer类,该类实际上调用了GetItemText()属性,该属性调用ToString()而不是IComparable接口。虽然ComboBox.Sorted=true,但从未调用函数IComparable.CompareTo。此答案是错误的。IComparable永远不会被称为!(框架4)为什么这是4票赞成的公认答案???第二,第三,第四?