Ошибка «Индекс был вне диапазона» в приложении ASP.Net - PullRequest
1 голос
/ 29 апреля 2011

Я делаю приложение ASP.Net / C #, в котором у меня есть Gridview с флажком в каждой строке.

Проблема в том, что некоторые из них, выбрав и нажав «Сохранить», вызывают следующую ошибку:

Индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.\ r \ nИмя параметра: index.

И эта ошибка, по-видимому, возникает только в последней строке 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's

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

Примечание: Gridview стремится регистрировать в базе данных все выбранные строки.

Примечание2: я много искалвеб-решение, но все представленное, ни один из них не решил мою проблему.

Спасибо!

[] s

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Ваша строка должна быть:

if (((CheckBox)grdListaVulsProj.Rows[cont].FindControl("chkSelecionaItem")).Checked)  <<< WHERE THE ERROR OCCURS  
2 голосов
/ 29 апреля 2011

Я думаю, ваша проблема здесь:

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

Действительно ли idVul является индексом в коллекции строк, или вы намеревались использовать cont там?

0 голосов
/ 29 апреля 2011

Проблема, с которой я обычно сталкиваюсь, заключается в том, что строка 0 на самом деле является заголовком, а последняя строка - нижним колонтитулом.

Попробуйте сравнение следующим образом:

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