2016-06-22 7 views
-1

3 열로 ListView (세부 정보)를 만들었으므로 항목을 채 웁니다. 그러나 Active Directory에서 응용 프로그램을 실행할 때이 오류가 발생합니다. "인덱스가 범위를 벗어났습니다. 음수이고 컬렉션의 크기보다 작습니다 ". 매개 변수 이름 : 인덱스ListView에 열을 채울 수 없습니다.

UPDATE :.이 코드는 이제 오류없이 작동하고 (하지만 난 날짜 형식으로 변환 할 필요가

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); 
} 

당신은 그 문제를 해결하는 방법을 나 되겠습니까 시겠어요

+0

코드를 디버그하여 값이 널 (null)인지 또는 데이터가 없는지 확인하십시오. 이유가 때때로 인덱스 오류가 발생하는 이유 일 수 있습니다. – DharaPPatel

+0

LDAP 쿼리는 3 명의 사용자를 반환하며 모두 name, office 및 pwdlastset이 null이 아닙니다. – expirat001

+0

정확히 어디에서 충돌이 발생합니까? 이름, 사무실 또는 가치를 얻으려고 할 때? –

답변

0

? pwdLastSet 문자를 LS 자본 필요합니다. null 예외를 피하기 위해이 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 
    })) 
); 
+0

맞음. 고마워. – expirat001

관련 문제