Индекс за пределами диапазона индекс должен быть положительным числом как исправить

Есть словарь, в котором ключ – номер чека, значение – список из покупок.
При попытке добавить значение словаря в DataGridView возникает исключение “Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции”.
В чем может быть проблема? В обычный Label все выводится без проблем.

 label3.Text = null;
            foreach(KeyValuePair<int, List<string>> KeyValue in tidDB.tidDict)
            {
                label3.Text += KeyValue.Key.ToString();
                foreach(string str in KeyValue.Value)
                {
                    label3.Text += str + ",";
                }
                label3.Text += Environment.NewLine;
            }
            dataGridView3.DataSource = null;
            dataGridView3.AutoGenerateColumns = false;
            dataGridView3.ColumnCount = 2;
            dataGridView3.Columns[0].Name = "Номер чека";
            dataGridView3.Columns[1].Name = "Список покупок";
            //dataGridView3.DataSource = tidDB.tidDict.ToArray();
            int i = 0;
            foreach(KeyValuePair<int, List<string>> KeyValue in tidDB.tidDict)
            {

                    dataGridView3.Rows[i].Cells["Номер чека"].Value = KeyValue.Key;
                    foreach(string str in KeyValue.Value)
                    {
                        dataGridView3.Rows[i].Cells["Список покупок"].Value = KeyValue.Value.ToString() + ",";
                    }
                i++;


                //dataGridView3.Rows.Add(KeyValue.Key);
                //dataGridView3.Rows.Add(KeyValue.Value);
            }

введите сюда описание изображения

EvgeniyZ's user avatar

EvgeniyZ

15.1k2 золотых знака26 серебряных знаков50 бронзовых знаков

задан 3 мая 2020 в 21:08

Lika Barken's user avatar

1

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

                int i = 0;
            foreach(KeyValuePair<int, List<string>> KeyValue in tidDB.tidDict)
            {
                dataGridView3.Rows.Add(); // добавить строку, чтобы можно было обращаться к уже существующей строке по индексу
                dataGridView3.Rows[i].Cells["Номер чека"].Value = KeyValue.Key;
                    foreach(string str in KeyValue.Value)
                    {
                        dataGridView3.Rows[i].Cells["Список покупок"].Value += str + " ";
                    }
                i++;
            }

ответ дан 3 мая 2020 в 21:27

Lika Barken's user avatar

Lika BarkenLika Barken

511 серебряный знак10 бронзовых знаков

1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

1

Ошибка: “Индекс за пределами диапазона”

21.02.2013, 07:52. Показов 22000. Ответов 15


Студворк — интернет-сервис помощи студентам

помогите пожалуйста
у меня выходит ошибка
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
как ее исправить???



0



72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 08:00

2

Если разговор идет о массиве, то учитывайте, что индексация начинается с 0, а не с 1. Допустим массив из 5 элементов в представлении C# будет считаться как 0, 1, 2, 3, 4. Скорее всего ошибка в этом.



0



Эксперт Java

4088 / 3822 / 745

Регистрация: 18.05.2010

Сообщений: 9,331

Записей в блоге: 11

21.02.2013, 08:09

3

Цитата
Сообщение от 4uvak s karkara
Посмотреть сообщение

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

В массиве, например, всего 3 элемента, а вы пытаетесь получить пятый элемент.
Как исправить – не пытаться получать пятый элемент для массива из трех элементов.



0



1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

21.02.2013, 08:16

 [ТС]

4

извините но я новичок и вас немножко на понял
вот код программы
double ax = double.Parse(textBox1.Text);
double bx = double.Parse(textBox2.Text);
double dx = double.Parse(textBox3.Text);
double a = double.Parse(textBox4.Text);
double b = double.Parse(textBox5.Text);
double c = double.Parse(textBox6.Text);
dataGridView1.RowCount = 1;
int i = 0;
for (double x = ax; x <= bx; x += dx)
{
double F;
double h;
dataGridView1.RowCount++;
int o;
if (c < 0 && x != 0)
F = -a * x – c;
else if (c > 0 && x == 0)
F = (x – a) / -c;
else
F = b * x / (c – a);
if ((a != 0 || b != 0) && (a != 0 || c != 0))
h = F;
else
{
o = (int)F;
h = F – o;
};

dataGridView1[0, i].Value = x.ToString();
dataGridView1[1, i++].Value = h.ToString();

}
}



0



72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 08:27

5

4uvak s karkara, А зачем вы тут dataGridView1[1, i++].Value = h.ToString(); используете i++? У вас же как я понял одна строка, вы должны написать dataGridView1[1, i].Value = h.ToString();

Тут dataGridView1[0, i].Value = x.ToString(); вы обращаетесь к первому столбцу и первой строке
а тут dataGridView1[1, i].Value = h.ToString(); вы обращаетесь ко первому столбцу и первой строке



0



1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

21.02.2013, 08:34

 [ТС]

6

и что вы рекомендуете мне написать?



0



72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 08:45

7

4uvak s karkara, Замените строку dataGridView1[1, i++].Value = h.ToString(); на это dataGridView1[1, i+].Value = h.ToString();

И вообще, используйте теги [CSHARP] когда копируете код программы на форум.



0



obrazer

73 / 73 / 3

Регистрация: 04.09.2012

Сообщений: 170

21.02.2013, 08:45

8

C#
1
2
dataGridView1[1, i].Value = h.ToString();
i++;



0



sashk0

72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 08:48

9

Цитата
Сообщение от obrazer
Посмотреть сообщение

C#
1
2
dataGridView1[1, i].Value = h.ToString();
i++;

Судя по коду в dataGridView всего лишь одна строка, i++ нет смысла использовать, т.к. будет только одна итерация.



0



73 / 73 / 3

Регистрация: 04.09.2012

Сообщений: 170

21.02.2013, 08:52

10

Цитата
Сообщение от sashk0
Посмотреть сообщение

Судя по коду в dataGridView всего лишь одна строка

В начале одна – в цикле идет увеличение количества. “dataGridView1[1, i].Value =…” находится внутри цикла.



0



1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

21.02.2013, 08:54

 [ТС]

11

если убрать один + то выходит другая ошибка



0



sashk0

72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 08:59

12

так для начала нужно добавить строку в dataGridView методом dataGridView1.Rows.Add()

И вообще тогда код исправить на этот:

C#
1
dataGridView1.Rows.Add(x.ToString(), h.ToString());

Вместо

C#
1
2
dataGridView1[0, i].Value = x.ToString();
dataGridView1[1, i++].Value = h.ToString();

При этом каждую итерацию в цикле будет добавляться новая строка в dataGridView1 в самый конец. В результате будет столько строк, сколько итераций в цикле.



0



1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

21.02.2013, 09:03

 [ТС]

13

Здесь выходит только один столбец
а мне нужно 2



0



1 / 1 / 0

Регистрация: 19.02.2013

Сообщений: 24

21.02.2013, 09:20

 [ТС]

15

Большое спасибо за помощь!!!



1



72 / 72 / 7

Регистрация: 14.03.2012

Сообщений: 201

21.02.2013, 09:30

16

Цитата
Сообщение от 4uvak s karkara
Посмотреть сообщение

Большое спасибо за помощь!!!

Не по теме:

Для этого есть специальная кнопочка



1



При запуски программы и при вводе n и m, на строчке dataGridView1[i, j].Value = a[i,j]; – ошибка (” индекс находится за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции “) Когда n и m равны единице, тогда все работает.

int n = Convert.ToInt32(textBox1.Text);
            int m = Convert.ToInt32(textBox2.Text);
            int [,] a = new int [n, m];
            Random r = new Random();
            dataGridView1.RowCount = n;
            dataGridView1.ColumnCount = m ;
            for (int i=0; i<n; i++)
                for (int j=0; j<m; j++)
                {
                    a[i, j] = r.Next(100);
                   
                }
           for (int i=0; i<n; i++)
                for (int j=0; j<m; j++)
                {
                    dataGridView1[i, j].Value = a[i,j];
                   
                }

необрабатываемое исключение в приложении.
Индекс за пределами диапозон.

Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.Collections.ArrayList.get_Item(Int32 index)
в System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
в Declarant_Alko.modalDialogs.BaseChoice.BaseChoice_Load(Object sender, EventArgs e)
в System.Windows.Forms.Form.OnLoad(EventArgs e)
в System.Windows.Forms.Form.OnCreateControl()
в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
в System.Windows.Forms.Control.CreateControl()
в System.Windows.Forms.Control.WmShowWindow(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ContainerControl.WndProc(Message& m)
в System.Windows.Forms.Form.WmShowWindow(Message& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Загруженные сборки **************
mscorlib
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3615 (GDR.050727-3600)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
—————————————-
Declarant-Alko
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///C:/Documents and Settings/Лена/Мои документы/ФСРАР/Декларант-Алко/Declarant-Alko.exe
—————————————-
System.Windows.Forms
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
—————————————-
System
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3614 (GDR.050727-3600)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
—————————————-
System.Drawing
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
—————————————-
Accessibility
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
—————————————-
System.Data
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
—————————————-
System.Xml
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3082 (QFE.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
—————————————-
mscorlib.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.3615 (GDR.050727-3600)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
—————————————-
System.Windows.Forms.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
—————————————-
System.Data.SqlServerCe
Версия сборки: 3.5.1.0
Версия Win32

ошибка первого запуска Декларант-Алко

Добрый день! Сегодня хочу Вам рассказать как исправить ошибку, которая появляется при первом запуске Декларант-Алко

Ошибка звучит так: Необрабатываемое исключение в приложении. При нажатии кнопки «Продолжить» приложение проигнорирует ошибку и попытается продолжить работу. При нажатии кнопки «Выход» приложение немедленно завершит работу. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index.

Ошибку исправить очень просто. Нам нужно установить дополнительную программу, чтобы Декларант-Алко мог корректно работать.

Программа называется SSCERuntime-RUS. Качаем программу и устанавливаем ее. Скачали? Вы увидите вот такой файл.

SSCERuntime-RUS

Запустим его и увидим вот такое окно. Пока не будем обращать внимание что там написано, к этому вопросу вернемся попозже. Нажимаем просто кнопку «ДА»

Версия SSCERuntime-RUS

Дальше увидим окно, в котором нас просят выбрать папку для того, чтобы распаковать файлы. Просто выбираем любую папку, нажав кнопку «Обзор», после того как путь выбран, нажимаем «ОК»

Выбор пути для распаковки SSCERuntime-RUS

Дальше видим окно, сообщающее нам об удачной распаковки наших файлов, нажимаем «OK»

Успешная распаковка файлов

Теперь переходим в папку с распакованными файлами. В этой папке мы видим 3 файла, но нам интересны только два, это SSCERuntime_x64-RUS.msi и SSCERuntime_x86-RUS.msi

Папка с SSCERuntime-RUS

Теперь дальнейшие шаги зависят от того, какая у Вас разрядность Windows. Разрядность можно посмотреть так: нажимаете на «Мой компьютер» правой кнопкой и нажимаете кнопку «Свойства»

Проверка разрядности системы

И тут смотрим, какая у Вас разрядность Windows. У меня 32х разрядная.

32 разряд Windows

Теперь приступим к самой установке SSCERuntime-RUS. Если у Вас 32х разрядная Windows, то Вам следует запустить SSCERuntime_x86-RUS.msi. Если у Вас 64х разрядная Windows, то Вам следует запустить SSCERuntime_x86-RUS.msi, а после Вам нужно будет установить и SSCERuntime_x64-RUS.msi, ПОСЛЕДОВАТЕЛЬНОСТЬ НАРУШАТЬ НЕЛЬЗЯ!

Предположим, что у Вас как и у меня 32х разрядная приступим к установке. Запускаем SSCERuntime_x86-RUS.msi и видим вот такое окно приветствия, просто нажимаем «Далее»

Установка SSCERuntime_x86-RUS

Теперь мы видим окно с условиями лицензионного соглашения. Ставим точку на пункт «Я принимаю условия лицензионного соглашения» и нажимаем «Далее»

Лицензия SSCERuntime_x86-RUS

Теперь выбираем путь, куда будет произведена установка, я оставлю по умолчанию, просто нажму «Установить»

Выбираем путь установки SSCERuntime_x86-RUS

Теперь наблюдаем процесс установки

Процесс установки SSCERuntime_x86-RUS

По окончанию установки нажимаем «Готово»

Конец установки SSCERuntime_x86-RUS

Все, теперь снова пробуем запускать наш Декларант-Алко. Все удачно запускается!

Успешный запуск Декларант-Алко

Ну вот и все, надеюсь я помог Вам победить ошибку: Необрабатываемое исключение в приложении. При нажатии кнопки «Продолжить» приложение проигнорирует ошибку и попытается продолжить работу. При нажатии кнопки «Выход» приложение немедленно завершит работу. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index.

Если у Вас остались вопросы пишите их в комментариях! Всем удачи и добра!

Добавить комментарий