使用自定义序列从枚举值绑定下拉列表值

时间:2016-05-21 06:35:27

标签: c# asp.net enums dropdown

我正在使用visual studio 2013并从Enum值绑定asp.net下拉控件

我有这个枚举。

enum Name
    {
        Kumar = 1,
        Raju = 2,
        Anil = 3,
        Suresh = 4,
        Bhaskar = 5,            
    };

现在我在枚举 Chandra = 6 中添加了一个值,但是当我绑定下拉列表并且无法更新时,我希望 Bh​​askar = 5 应该处于最后位置枚举序列。

我希望此类型的结果显示在下拉列表中。

 Kumar 
 Raju 
 Anil  
 Suresh 
 Chandra
 Bhaskar

这就是我目前填充下拉列表的方式:

Array itemValues = System.Enum.GetValues(typeof(Name)); 
Array itemNames = System.Enum.GetNames(typeof(Name)); 
for (int i = 0; i <= itemNames.Length - 1 ; i++) 
{ 
    ListItem item = new ListItem(itemNames[i], itemValues[i]); 
    dropdownlist.Items.Add(item); 
}

1 个答案:

答案 0 :(得分:2)

您可以使用LINQ OrderBy()进行自定义排序,如下所示:

var itemNames = System.Enum.GetNames(typeof(Name)).OrderBy(o => o == "Bhaskar" ? 1 : 0); 

这种方式'Bhaskar'应该是itemNames中的最后一项以及枚举定义中排序的其他枚举值。

演示:(请参阅RVM wrappers

enum Name
{
    Kumar = 1,
    Raju = 2,
    Anil = 3,
    Suresh = 4,
    Bhaskar = 5,
    Chandra = 6
};

public static void Main()
{
    var itemNames = System.Enum.GetNames(typeof(Name))
                               .OrderBy(o => (string)o == "Bhaskar" ? 1 : 0)
                               .ToArray(); 
    for (int i = 0; i <= itemNames.Length - 1 ; i++) 
    {
        Console.WriteLine((string)itemNames[i]);
    }
}

输出

Kumar
Raju
Anil
Suresh
Chandra
Bhaskar