2017-11-01 3 views
-2

私はC#でオートコンプリートを使用していますが、SQLストアドプロシージャを使用してテスト済みのデータを取得しています。テーブルのデータをオートコンプリートに渡すためにデータを引き出すC#

私が持っている問題は、私がオートコンプリータを実装している私のforループであることです。

AutoCompleteStringCollection col = new AutoCompleteStringCollection(); 
     int i = 0; 
     foreach (DataRow row in TYPESDS.Tables[0].Rows) 
     { 
      col.Add(row[i].ToString().ToUpper()); 
      i++; 
     } 

上記は私がこの点に関して行っているところですが、エラーは発生しませんが、コードは機能しません。

私はオートコンプリータを使用していますが、これはSQLにコードが埋め込まれているため、ストアドプロシージャを使用して作業しています。

+0

「動作しません」と定義します。それは何をするためのものか?デバッガでこのコードをステップ実行すると、最初に期待していたものからどのように外れていますか?そのループはまったく反復しますか?値は 'col'に追加されていますか? *具体的に何が起こるのですか? – David

+0

ステップ実行中にautoCompleterメソッドが1回実行され、2回目の実行でcol.Addが実行されます。IndexOutOfRange例外が処理されませんでした – benjano

+0

この問題は、列1が見つからないために発生しています。しかし、私の理解から、私はそれを変更する必要はありません行と列番号を通過するように頼んでいる? – benjano

答えて

1

問題はforeach()を使用して行を反復し、次に各行に対してインデクサー(i)を使用することです。

元のコードサンプルでは、​​各繰り返しの「行」はデータ行です。これに対するデフォルトのインデクサーはCOLUMNSにインデックスを作成しています。したがって、最初の行では列0にアクセスし、2番目の行では列1にアクセスします。

2番目の例は、テーブルのRowsコレクションプロパティでindexer(i)を使用しているために機能します。これにより、ROWにアクセスしています。この行でフィールド名インデクサーを使用して「タイプ」列を取得します。最初の例は、これに変更された場合

AutoCompleteStringCollection col = new AutoCompleteStringCollection(); 
foreach (DataRow row in TYPESDS.Tables[0].Rows) 
{ 
    col.Add(row["Type"].ToString().ToUpper()); 
} 

そしてそれは第二(作業)の例と基本的に等価です。

0

私はforeachの使用をあきらめ、次のように動作させました。

for (int i = 0; i < TYPESDS.Tables[0].Rows.Count - 1; i++) 
    { 
     col.Add(TYPESDS.Tables[0].Rows[i]["Type"].ToString().ToUpper()); 
    } 

主な問題は、行[i]に["Type"]が付いていないと考えられます。

関連する問題