【发布时间】:2010-11-25 14:01:17
【问题描述】:
是否可以在组合框中自定义排序/显示顺序?假设我想要一个特殊值“MasterValue”在所有其他人之前。
【问题讨论】:
是否可以在组合框中自定义排序/显示顺序?假设我想要一个特殊值“MasterValue”在所有其他人之前。
【问题讨论】:
创建一个实现 IComparable 并覆盖 ToString 的类,而不是添加字符串。
将该类的实例添加到您的 ComboBox
【讨论】:
下面的代码可以解决问题。
为要排序的项目创建一个单独的列表,然后使用 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。
然后获取数据源,并在数据视图中添加一个附加行,附加字段的值为 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";
}
【讨论】: