2017-09-28 8 views
-1

私はDataTabletableと呼ばれています。 DataRowのインデックスがtableに格納されている必要があります。DataTable.Rows.IndexOf throw 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]}が表示されますか?ダミーテーブルを作成して1行追加することでコードを実行しました。それは例外なく働いた。 – JFT

答えて

1

@ServerS問題は、最初の行から何も受信していないということです。カウントは0です。ユーザ[0]を実行する前に、カウントを確認してください。以下はあなたのサンプルコードです。私はこれを試して、それは正常に動作します。

 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

関連する問題