我正在制作ASP.Net / C#应用程序,其中每行都有一个带复选框的Gridview。
问题是其中一些通过选择并单击“保存”发生以下错误:
指数超出范围。必须是非负数且小于集合的大小。 \ 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 Properties的
http://i56.tinypic.com/33f3hqf.jpg
注意:Gridview旨在在数据库中注册所有选定的行。
注2:我广泛搜索了一个Web解决方案,但所有内容都没有解决我的问题。
谢谢!
[]的
答案 0 :(得分:3)
你的行应该是:
if (((CheckBox)grdListaVulsProj.Rows[cont].FindControl("chkSelecionaItem")).Checked) <<< WHERE THE ERROR OCCURS
答案 1 :(得分:2)
我猜你的问题就在这里:
if (((CheckBox)grdListaVulsProj.Rows[idVul]...
idVul
真的是行集合的索引,或者你的意思是在那里使用cont
吗?
答案 2 :(得分:0)
我经常遇到的问题是第0行实际上是标题,最后一行是页脚。
尝试这样的比较:
if (grdListaVulsProj.Rows[cont].RowType == DataControlRowType.DataRow)
{
// your code here
}