RamyaGrandhi Ответов: 1

Как решить это исключение "индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс"


else
                {
                    lblErrorPK.Text = "Don't change " + ColumnName + " Column";
                    // Session["ErrorColumn"] = lblErrorPK.Text;
                    string ColNames = string.Empty;
                    int count=0;
                    for (int row = 0; row < dt.Columns.Count; row++)
                    {
                        foreach (DataColumn column in dt.Columns)
                        {
                            string FcName = column.ToString();
                            if (ColumnName == FcName)
                            {
                                count++;
                                break;
                            }
                            else
                            {
                                count++;
                                continue;
                            }
                        }
                        break;  
                    }
                    Grddataset.Columns[count].Visible = false;
                    Grddataset.DataSource = dt;
                    Grddataset.DataBind();
                }


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

сопоставление столбцов набора данных с одной строкой

с помощью этого строкового индекса я хочу скрыть этот столбец в GridView.

F-ES Sitecore

Вероятно, вам не нужно "count++;" перед "break;", кроме того, ваш код выдаст эту ошибку, если не будет найдено совпадающее имя, поэтому вам нужно "if" вокруг трех строк Grddataset, которые запускают эти строки только в том случае, если count меньше количества столбцов в Grddataset.

1 Ответов

Рейтинг:
1

OriginalGriff

Посмотрите на сообщение об ошибке:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index"
Это довольно понятно, но я попробую: вы использовали значение в качестве индекса в массиве, который находится за пределами массива. Если у вас есть массив целых чисел, содержащий числа 10, 11 и 12, то у вас есть массив из трех элементов, и (поскольку индексы массива C# основаны на нуле) это означает, что единственными допустимыми значениями индекса массива являются 0, 1 и 2. Любые отрицательные числа дадут вам исключение "индекс вне диапазона", как и любые значения, которые равны трем или больше.

Мы не можем сказать вам, почему ваш код использует недопустимый индекс: это сводится к фактическому значению переменной при доступе к массиву и данным в массиве для начала - ни к одному из них у нас нет доступа, поскольку мы не можем запустить ваше приложение в тех же условиях, что и вы!

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит - отладчик: Начало работы с отладчиком - Visual Studio | Microsoft Docs[^]

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!