排序我的下拉列表的更好方法

时间:2011-09-23 16:50:13

标签: c# asp.net-4.0

在我用英语检索国家/地区名称后,我将国家/地区名称转换为本地化版本,我需要再次对这些名称进行排序,因此我使用了 SortDropDownList 。 在我对下拉列表项进行排序之后,我将丢失我设置的 PrivacyOption 属性。 有人可以建议我一些解决方案,以便我可以在我想保留隐私选项属性的同时对我的下拉列表进行排序 我使用asp.net4.0和C#作为代码隐藏

int iCount = 1;

//fetch country names in English
List<CountryInfo> countryInfo = ReturnAllCountriesInfo();

foreach (CountryInfo c in countryInfo)
{
    if (!string.IsNullOrEmpty(Convert.ToString(
        LocalizationUtility.GetResourceString(c.ResourceKeyName))))
    {
        ListItem l = new ListItem();
        l.Text = Convert.ToString(
                    LocalizationUtility.GetResourceString(c.ResourceKeyName));
        l.Value = Convert.ToString(
                    LocalizationUtility.GetResourceString(c.ResourceKeyName));
        //True /False*
        l.Attributes.Add("PrivacyOption", *Convert.ToString(c.PrivacyOption));

        drpCountryRegion.Items.Insert(iCount, l);
        iCount++;
    }
    //sorts the dropdownlist loaded with country names localized language
    SortDropDownList(ref this.drpCountryRegion);  
}

用于排序下拉列表项的代码

private void SortDropDownList(ref DropDownList objDDL)
{
    ArrayList textList = new ArrayList();
    ArrayList valueList = new ArrayList();

    foreach (ListItem li in objDDL.Items)
    {
        textList.Add(li.Text);

    }

    textList.Sort();

    foreach (object item in textList)
    {
        string value = objDDL.Items.FindByText(item.ToString()).Value;
        valueList.Add(value);
    }
    objDDL.Items.Clear();

    for (int i = 0; i < textList.Count; i++)
    {
        ListItem objItem = new ListItem(textList[i].ToString(), 
               valueList[i].ToString());              

        objDDL.Items.Add(objItem);

    }
}

在我用英语检索国家/地区名称后,我将国家/地区名称转换为本地化版本,我需要再次对这些名称进行排序,因此我使用了SortDropDownList。 在我对下拉列表项进行排序之后,我将丢失我设置的PrivacyOption属性。 有人可以建议我一些解决方案,以便我可以在我想保留隐私选项属性的同时对我的下拉列表进行排序

3 个答案:

答案 0 :(得分:3)

在填充DropDownList之前对数据进行排序。

IEnumerable<Country> sortedCountries = countries.OrderBy(
                c => LocalizationUtility.GetResourceString(c.ResourceKeyName));

foreach (Country country in sortedCountries)
{
    string name = LocalizationUtility.GetResourceString(country.ResourceKeyName);
    if (!string.IsNullOrEmpty(name))
    {
        ListItem item = new ListItem(name);
        item.Attributes.Add(
             "PrivacyOption", 
             Convert.ToString(country.PrivacyOption));
        drpCountryRegion.Items.Add(item);
    }
}

答案 1 :(得分:0)

您是否考虑过在SortedDictionary中而不是List中对信息进行排序?

答案 2 :(得分:0)

我不确定我是否理解您的SortDropDownList方法的实现是如何工作的。但是,我建议使用 List&lt; KeyValue&lt; string,string&gt;&gt; 绑定到您的下拉列表。您可以在键值对中使用英语部分和本地部分,并进行相应的排序。