2011-04-29 38 views
1

我正在做一个应用程序ASP.Net/C#,其中我有一个GridView复选框在每一行。错误“索引超出范围”在ASP.Net应用程序

的问题是,通过选择并点击“保存”下面的错误他们中的一些情况:

指数超出范围。必须是非负数且小于集合的大小。 \ r \ n参数名称:索引。

而这个错误似乎只发生在Gridview的最后一行。后续的编码和属性窗口的GridView的片段:

C#

protected void btnOKVulsProj_Click(object sender, EventArgs e) 
    { 

      //Variables 

     for (int cont = 0; cont < grdListaVulsProj.Rows.Count; cont++) 
     { 
      idVul = Convert.ToInt32((grdListaVulsProj.Rows[cont].Cells[0]).Text); 

      string strQueryInsert = ("INSERT TO DATABASE"); 

      if (((CheckBox)grdListaVulsProj.Rows[idVul].FindControl("chkSelecionaItem")).Checked) <<< WHERE THE ERROR OCCURS 

      { 
       Conexao.Inserir(strQueryInsert); //Method that performs the insertion 
      } 
     }; 

      //Other instructions 

    } 



的GridView属性的

http://i56.tinypic.com/33f3hqf.jpg

注:GridView的目的是在注册数据库将选择所有行。注2:我广泛搜索了一个Web解决方案,但都提出了,他们都没有解决我的问题。

谢谢!

[]的

回答

3

您的线路应该是:

if (((CheckBox)grdListaVulsProj.Rows[cont].FindControl("chkSelecionaItem")).Checked) <<< WHERE THE ERROR OCCURS 
+0

这真的使更多的意义 – 2011-04-29 13:48:52

+0

非常感谢你的fantasticfix。这解决了我的问题。一个简单的逻辑错误,也许是因为我是初学者:P – 2011-04-29 14:10:57

2

我猜你的问题是在这里:

if (((CheckBox)grdListaVulsProj.Rows[idVul]... 

idVul真正的索引,行集合,还是你的意思是使用cont呢?

+0

我认为这是正确的做法,但上面的一个更有意义。 (y) – 2011-04-29 14:17:42

0

我经常遇到的问题是该行0实际上是头部和最后一行是页脚。

尝试比较像这样:

if (grdListaVulsProj.Rows[cont].RowType == DataControlRowType.DataRow) 
{ 
// your code here 
} 
+0

不了解这种形式,那么我也会测试它。 Thaks答复 – 2011-04-29 14:15:15