2017-09-28 4 views
-1

table이라는 DataTable이 있습니다. DataRow의 색인을 table에 저장해야합니다.DataTable.Rows.IndexOf throws System.IndexOutOfRangeException C#

DataRow[] user = table.Select("Username = '" + username + "'"); 
table.Rows.IndexOf(user[0]); 

첫 번째 행은 정상적으로 작동합니다. 다른 곳에서는 DataRow을 사용하기 때문에 유효한 DataRow을 반환한다는 것을 알고 있습니다. 그러나 table.Rows.IndexOf(user[0]);을 실행하면 System.IndexOutOfRangeException이 표시되며 '인덱스가 배열 범위 밖에 있습니다.'라는 메시지가 나타납니다. 왜 이것이 예외를 던지는 지 이해할 수 없습니다. 누구든지 아이디어가 있습니까?

+0

테이블에 "Username = xxxxxx"필드가 있습니까? 그것이 바로 그것이 원하는 것입니다. – MaCron

+0

사용자 이름이라는 열이 있습니다. – ServerS

+1

사용자 위로 마우스를 가져 가면 첫 번째 줄에서 {System.Data.DataRow [1]}을 (를) 볼 수 있습니까? 더미 테이블을 만들고 한 행을 추가하여 코드를 실행했습니다. 그것은 예외없이 작동했습니다. – JFT

답변

1

@ServerS 문제는 첫 번째 행에서 어떤 행도받지 못하고 있다는 것입니다. 카운트는 0입니다. 사용자 [0]을 (를) 수행하기 전에 카운트를 확인하고 싶을 수 있습니다. 아래 샘플 코드는 you.I 시도하고 괜찮 았어.

 DataTable table = new DataTable(); 
     table.Clear(); 
     table.Columns.Add("Username"); 
     table.Columns.Add("Marks"); 

     DataRow dataRow = table.NewRow(); 
     dataRow["Username"] = "xyz"; 
     dataRow["Marks"] = "500"; 
     table.Rows.Add(dataRow); 
     var username = "xyz"; 

     DataRow[] user = table.Select("Username = '" + username + "'"); 
     if(user.Length > 0) 
     table.Rows.IndexOf(user[0]); 
+0

@Rufus L 몇 가지 의견을 추가했습니다. 감사. – JFT