代码之家  ›  专栏  ›  技术社区  ›  Vijjendra

在ASP.NET C中排序哈希表数据#

  •  0
  • Vijjendra  · 技术社区  · 16 年前

    我正在将DropDownList与枚举绑定,我有以下枚举和绑定DropDownList的代码。

    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为bind时,数据不是按排序顺序混合的,我希望DropDownlist是按枚举创建的顺序绑定的。

    5 回复  |  直到 16 年前
        1
  •  0
  •   Paul Sasik    16 年前

    实际上有一个叫做 OrderedDictionary 这给了你两种能力:排序和键控访问。

        2
  •  3
  •   Jon Skeet    16 年前

    如果你想把这些东西按顺序摆放, 添加 他们,你不想要哈希表 SortedList . (排序列表很好,但如果您稍后决定需要调整顺序,它将导致问题。)特别是,您不需要使用按键查找值的功能,因此不需要 IDictionary<,> 据我所知。

    你只想要一个 List<T> 对于包含键和值的类型。您可以使用匿名类型进行此操作,例如:

    var keyValuePairs = Enum.GetValues(enumDataSource)
                            .Select(x => new { key = x.ToString(), value = x })
                            .ToList();
    BindDropDown(dropDownList, keyValuePairs, "key", "value");
    
        3
  •  2
  •   Kyle Rosendo    16 年前

    A HashTable 那不是工作的工具。试一试 SortedList .

    记住,哈希表支持非常快速的搜索,但是它不保持任何顺序

        4
  •  0
  •   antuan    16 年前

    您可以做的一件事是迭代bindDropDown方法中的ht,一次添加一个listem,以便按索引排序。

        5
  •  0
  •   Saar    16 年前

    只需使用sortedlist或用sortedlist替换hashtable