2017-08-10 11 views
0

私は4列の動的に作成されたASPテーブルを持っています。最初の列はテキスト、2番目のテキストボックス、3番目と4番目はテキストです。私はテーブルを反復してテキストボックスから値を取得する必要があります。しかし、私はテキストボックスの値を取得しようとしているときにこの例外が発生しています:指定された引数が有効な値の範囲外です。私は、テキストボックスが2番目の列にあるので、セルインデックスを1に設定します。テキストボックスからテキストを取得するにはどうすればよいですか?指定された引数が有効な値の範囲外でしたか? c#

foreach (TableRow row in this.reading.Rows) 
     { 
      var textbox = (TextBox)row.Cells[1].Controls[1]; 
      string id = row.Cells[3].Text; 

      if (textbox.Text != "") 
      { 
       double f = Convert.ToDouble(textbox.Text); 
       DBConn.update(f, id); 
      } 
      else 
      { 

      } 
     } 
+2

エラーがどこにあるかを調べるコードをデバッグします。何が起こっているのかを推測するのは難しいですが、あなたが投稿したコードとエラーによって、3つの場所があります: 'Cells [1]'、 'Controls [1]'と 'row.Cells [3 ] '。たぶん、テキストボックスは2番目の列にありますが、例外は 'Controls [1]'または 'row.Cells [3]'にスローされています。それでもまだデバッグが見つからない場合は、さらに詳細な情報を提供する必要があります(デバッグを行うための洞察からでも)。よろしく。 – dime2lo

答えて

1

dime2loは、デバッグ/詳細情報なしでエラーを見つけるのは難しいと言います。

テーブル行の2番目のコントロールにテキストボックスを割り当てるのではなく、コントロールに割り当てて、山括弧を削除してください。

var controls = row.Cells [1] .Controls;

はその後コントロール

foreach (Control c Controls) 
     { 
     //Debug in here. 
     } 

それは間違って起こってどこで参照してください。この意志少なくとも助けを反復します。

+0

ありがとう、私はあなたのアイデアに似た何かで動作させました。しかし今、私は行からテキストを取得する方法に固執しています。セル[3]。テキスト。特定の列をどのように反復処理できますか? – batwing

+0

セルの値を調べるために、割り当てられていない値がない場合は、すべてのセルを繰り返し処理したい場合は、ブレークポイントを挿入します。 foreach(row.CellsのDataGridViewCellセル){ value = cell.Value.ToString();} – user685590

関連する問題