nar86 Ответов: 1

Индекс находился вне допустимого диапазона


Мой код выглядит следующим образом

private void SaveCheckedValues()
        {
            System.Collections.ArrayList userdetails = new System.Collections.ArrayList();
            int index = -1;
            foreach (GridViewRow gvrow in grdRpt.Rows)
            {
                object o = grdRpt.DataKeys[gvrow.RowIndex].Value;
                index = (int)0;
                bool result = ((CheckBox)gvrow.FindControl("chkselecdata")).Checked;

                // Check in the Session
                if (Session["CHECKED_ITEMS"] != null)
                    userdetails = (System.Collections.ArrayList)Session["CHECKED_ITEMS"];
                if (result)
                {
                    if (!userdetails.Contains(index))
                        userdetails.Add(index);
                }
                else
                    userdetails.Remove(index);
            }
            if (userdetails != null && userdetails.Count > 0)
                Session["CHECKED_ITEMS"] = userdetails;
        }


когда я запускаю приведенный выше код показывает ошибку следующим образом

индекс был вне досягаемости.
Должно быть неотрицательным и меньше размера имени параметра коллекции 'Index'

Ошибка отображается в следующей строке следующим образом

объект o = grdRpt.DataKeys[gvrow.Параметр rowindex].Значение;


В gridview значения выглядят следующим образом

transacteeid      totalprice   Qty   Isactive

109453628727        25           1      1
109453628727        15           2      1
565676778            8           3      1


Когда я отлаживаю и проверяю значение, я получаю значение как "109453628727"

как решить эту ошибку. в чем же ошибка в моем вышеприведенном коде?

Что я уже пробовал:

Мой код выглядит следующим образом

частный недействительными SaveCheckedValues()
{
Система.Коллекции.ArrayList userdetails = новая система.Коллекции.список ArrayList();
индекс int = -1;
по каждому элементу (gvrow GridViewRow в grdRpt.Строк)
{
объект o = grdRpt.DataKeys[gvrow.Параметр rowindex].Значение;
индекс = (int)0;
bool result = ((CheckBox)gvrow.FindControl("chkselecdata")).Проверен;

// Регистрация в сеансе
if (Session["CHECKED_ITEMS"] != null)
userdetails = (System.Коллекции.ArrayList)сессия["CHECKED_ITEMS"];
если (результат)
{
if (!userdetails.Содержит(индекс))
userdetails.Добавить(индекс);
}
еще
userdetails.Удалить(индекс);
}
if (userdetails != null && userdetails.Count > 0)
Session["CHECKED_ITEMS"] = userdetails;
}

когда я запускаю приведенный выше код показывает ошибку следующим образом

индекс был вне досягаемости.
Должно быть неотрицательным и меньше размера имени параметра коллекции 'Index'

Ошибка отображается в следующей строке следующим образом

объект o = grdRpt.DataKeys[gvrow.Параметр rowindex].Значение;


В gridview значения выглядят следующим образом

transacteeid totalprice кол-во метод isactive

109453628727 25 1 1
109453628727 15 2 1
565676778 8 3 1

Когда я отлаживаю и проверяю значение, я получаю значение как "109453628727"

как решить эту ошибку. в чем же ошибка в моем вышеприведенном коде?

1 Ответов

Рейтинг:
1

Jinto Jacob

вы пытаетесь получить доступ к индексу, которого нет в массиве. Это произойдет нормально, если вы попытаетесь получить доступ 5th член в массиве с 3 элементы.

попробуйте проверить значение gvrow.RowIndex а если массив grdRpt.DataKeys так много элементов.


nar86

ладно.

в моем приведенном ниже коде какие изменения я должен внести.

частный недействительными SaveCheckedValues()
{
Система.Коллекции.ArrayList userdetails = новая система.Коллекции.список ArrayList();
индекс int = -1;
по каждому элементу (gvrow GridViewRow в grdRpt.Строк)
{
объект o = grdRpt.DataKeys[gvrow.Параметр rowindex].Значение;
индекс = (int)0;
bool result = ((CheckBox)gvrow.FindControl("chkselecdata")).Проверен;

// Регистрация в сеансе
if (Session["CHECKED_ITEMS"] != null)
userdetails = (System.Коллекции.ArrayList)сессия["CHECKED_ITEMS"];
если (результат)
{
if (!userdetails.Содержит(индекс))
userdetails.Добавить(индекс);
}
еще
userdetails.Удалить(индекс);
}
if (userdetails != null && userdetails.Count > 0)
Session["CHECKED_ITEMS"] = userdetails;
}

когда я запускаю приведенный выше код показывает ошибку следующим образом

индекс был вне досягаемости.
Должно быть неотрицательным и меньше размера имени параметра коллекции 'Index'

Ошибка отображается в следующей строке следующим образом

объект o = grdRpt.DataKeys[gvrow.Параметр rowindex].Значение;

в моем приведенном выше коде какие изменения я должен внести.

nar86

пожалуйста, дайте мне знать, как решить эту проблему

Jinto Jacob

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

также проверьте, работает ли это

grdRpt.DataKeys[gvrow.Подряд.Параметр rowindex].Значение