2009-11-24 3 views
0

Я связываю свой раскрывающийся список с Enum У меня есть следующий список перечислений и код для списка выпадающего списка.Сортировка данных Hashtable в ASP.NET C#

public enum DignosisOrderType 
    { 
     All = 0, 
     General = 1, 
     Uveitis = 2, 
     Coag =3, 
     PreOp=4, 
     Tests=5, 
     RP =6 
    } 

public static void BindDropDownByEnum(DropDownList dropDownList, Type enumDataSource,) 
     { 
      Hashtable htDataSource = new Hashtable(); 

      string[] names = Enum.GetNames(enumDataSource); 
      Array values = Enum.GetValues(enumDataSource); 

      for (int i = 0; i < names.Length; i++) 
       htDataSource.Add(names[i], values.GetValue(i)); 

      BindDropDown(dropDownList, htDataSource, "key", "value"); 
     } 

     public static void BindDropDown(DropDownList dropDownList, object dataSource, string dataTextField, string dataValueField) 
     { 
      dropDownList.DataSource = dataSource; 
      dropDownList.DataTextField = dataTextField; 
      dropDownList.DataValueField = dataValueField; 
      dropDownList.DataBind(); 
     } 

когда DROPDOWNLIST будет связывать данные не в сортировке, поступающей заказ, я хочу DropDownList будет связывать в порядке Enum создается.

ответ

0

Существует на самом деле специализированная коллекция под названием OrderedDictionary, что дает вам как способности: сортировка и шпонкой доступ.

0

Одна вещь, которую вы можете сделать, - это перебрать HT в методе BindDropDown, добавив один ListItem за раз, поэтому они будут упорядочены по индексу.

0

Просто используйте SortedList или заменить HashTable с SortedList

2

HashTable не инструмент для работы тогда. Попробуйте SortedList.

Помните, HashTable поддерживает очень быстрый поиск, однако это не мешает любой заказ

3

Если вы хотите детали в порядке, вы добавляющие их, вы не хотите Хеш или a SortedList. (Сортированный список будет в порядке, в то время как вы действительно хотите, чтобы они были в порядке сортировки ключей в любом случае, но если позже вы решите, что вам нужно настроить порядок, это вызовет проблемы.) В частности, вы не пытаетесь использовать возможность посмотрите значение по ключу, так что вам не нужно IDictionary<,> вообще, насколько я вижу.

Для типа, содержащего ключ и значение, требуется только List<T>. Вы можете сделать это с помощью анонимного типа, например:

var keyValuePairs = Enum.GetValues(enumDataSource) 
         .Select(x => new { key = x.ToString(), value = x }) 
         .ToList(); 
BindDropDown(dropDownList, keyValuePairs, "key", "value"); 
+0

Я попробовал, но расширение «.select» не существует, что я нахожу для Enum.GetValues ​​(enumDataSource) – Vijjendra

Смежные вопросы