2017-08-10 227 views
0

我有一个动态创建ASP表,它有4个列。第一列是文本,第二个是文本框,第三个和第四个是文本。我需要遍历表并从文本框中获取值。但是,当我尝试获取文本框值时,我收到了此异常:指定的参数超出了有效值的范围。我将单元格索引设置为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个地方寻找:'细胞[1]','控制[1]'和'row.Cells [3 ]'。也许文本框确实在第二列,但是在'Controls [1]'或'row.Cells [3]'中抛出异常。如果你还没有发现调试,你将不得不提供更多的信息(甚至可以从你调试的任何洞察中得到)。问候。 – dime2lo

回答

1

由于dime2lo提到它很难找到没有调试/提供更多信息的错误。

尝试,而不是分配文本框的表行中的第2个控制将其分配到控制和去除你的尖括号。

功控制= row.Cells [1] .Controls;

然后通过控制

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

这在将至少帮助你看到它会错迭代。

+0

谢谢,我已经使它与您的想法类似的东西。但现在我被困在如何从row.Cells [3] .Text中获取文本。我如何迭代特定列?在 – batwing

+0

将断点来检查细胞值,如果它没有它可能不会被分配一个值,如果你只是想通过遍历所有的细胞,然后使用: 的foreach(在row.Cells的DataGridViewCell细胞){ 值= cell.Value.ToString();} – user685590

相关问题