使用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订购它们?
答案 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
作为您想要排序的占位符,因此将其更改为不动产。