WPF排序组合框项目

时间:2016-06-23 13:36:25

标签: c# combobox

使用C#WPF,我想用从Active Directory检索到的ítems填充组合框,但它们没有按特定顺序列出。我想从A到Z排序。

这是检索数据并填充组合框的代码。

    public void GetADInfo()
    {
        string ORG = "";         
        DirectoryEntry entry = new DirectoryEntry("LDAP://*****.com");            
        DirectorySearcher dSearch = new DirectorySearcher(entry);

        switch (cmb_org.SelectedIndex)
        {
            case 0:
                ORG = "AAA";
                break;
            case 1:
                ORG = "BBB";
                break;
            case 2:
                ORG = "CCC";
                break;
            case 3:
                ORG = "DDD";
                break;
            case 4:
                ORG = "EEE";
                break;
        }

        dSearch.Filter = "(l=" + ORG + ")";

        foreach (SearchResult sResultSet in dSearch.FindAll())
        {                
            cmb_name.Items.Add(GetProperty(sResultSet, "sn") + ", " + GetProperty(sResultSet, "givenName"));
        }

    }

    public static string GetProperty(SearchResult searchResult, string PropertyName)
    {
        if (searchResult.Properties.Contains(PropertyName))
        {
            return searchResult.Properties[PropertyName][0].ToString();
        }
        else
        {
            return string.Empty;
        }
    }

执行此代码后,所有组合都出现在组合框中。我怎样才能从A到Z订购它们?

3 个答案:

答案 0 :(得分:1)

尝试使用LINQ更新您的代码行:

foreach (SearchResult sResultSet in dSearch.FindAll())

dSearch.FindAll()
       .OfType<SearchResult>()
       .OrderBy( sr => GetProperty(sr, "sn") + ", " + GetProperty(sr, "givenName") ))

此致

答案 1 :(得分:0)

一种方法

List<string> itemlist = new List<string>();

foreach (SearchResult sResultSet in dSearch.FindAll())
{                
     itemlist.(GetProperty(sResultSet, "sn") + ", " + GetProperty(sResultSet, "givenName"));
}
itemlist.Sort();
foreach (string s in itemlist)
{ 
    cmb_name.Items.Add(s);
}

答案 2 :(得分:0)

理想情况下,您应该将组合框绑定到列表,而不是一次添加一个项目,但无论如何,您需要对列表进行排序。

使用您当前的代码更改您的循环:

 foreach (SearchResult sResultSet in dSearch.FindAll().OfType<SearchResult>().SortBy(d => d.Name))

如果您使用列表和绑定:

 BoundList = dSearch.FindAll().OfType<SearchResult>().SortBy(d => d.Name);

这里我使用Name作为您想要排序的占位符,因此将其更改为不动产。