C# 无法用列填充ListView
我创建了一个包含3列的ListView(Details),我想填充它们,但在Active Directory中运行应用程序时出现此错误:“索引超出范围。必须为非负且小于集合的大小”。参数名称:索引 更新:此代码现在可以正常工作(但我需要转换为datetime格式)C# 无法用列填充ListView,c#,C#,我创建了一个包含3列的ListView(Details),我想填充它们,但在Active Directory中运行应用程序时出现此错误:“索引超出范围。必须为非负且小于集合的大小”。参数名称:索引 更新:此代码现在可以正常工作(但我需要转换为datetime格式) directorySearcher.PropertiesToLoad.Add("name"); directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");
directorySearcher.PropertiesToLoad.Add("name");
directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");
directorySearcher.PropertiesToLoad.Add("pwdlastset");
SearchResultCollection results = directorySearcher.FindAll();
foreach (SearchResult result in results)
{
string name = result.Properties["name"][0].ToString();
string office = result.Properties["physicalDeliveryOfficeName"][0].ToString();
string pwdlastset = result.Properties["pwdlastset"][0].ToString();
ListViewItem item = new ListViewItem(new string[] { name, office, pwdlastset});
SearchResult.Items.Add(item);
}
您能告诉我如何解决这个问题吗?我想这是因为pwdLastSet需要大写字母
L
和S
。请尝试此linq解决方案以避免出现空异常:
directorySearcher.PropertiesToLoad.Add("name");
directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");
directorySearcher.PropertiesToLoad.Add("pwdLastSet");
SearchResult.Items.AddRange(
directorySearcher.FindAll().Where(x => x.Properties != null).Select(x => new ListViewItem(new string[] {
x.Properties["name"] != null && x.Properties["name"].Any()
? x.Properties["name"][0]
: String.Empty,
x.Properties["physicalDeliveryOfficeName"] != null && x.Properties["physicalDeliveryOfficeName"].Any()
? x.Properties["physicalDeliveryOfficeName"][0]
: String.Empty,
x.Properties["pwdLastSet"] != null && x.Properties["pwdLastSet"].Any()
? x.Properties["pwdLastSet"][0]
: String.Empty
}))
);
您是否尝试调试代码并查看是否有任何值为null或没有数据,因为有时这可能是您得到索引错误的原因。LDAP查询返回3个用户,他们都有name、office和pwdlastset not null。它到底在哪里崩溃?当您尝试获得name、office或value时?对于测试,我只设置了1列对于ListView。当使用属性“name”时,它只起作用。当使用“office”时,它失败了,但我发现我更应该使用“physicalDeliveryOfficeName”,它起作用。当使用PwdLastSet(这是正确的LDAP属性名)时,它在这里失败。因此,问题在于PwdLastSet。这是给我错误信息的属性(3个用户得到类似131111023173214141的结果):正确。非常感谢