Есть словарь, в котором ключ – номер чека, значение – список из покупок.
При попытке добавить значение словаря в 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
15.1k2 золотых знака26 серебряных знаков50 бронзовых знаков
задан 3 мая 2020 в 21:08
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 BarkenLika Barken
511 серебряный знак10 бронзовых знаков
1 / 1 / 0 Регистрация: 19.02.2013 Сообщений: 24 |
|
1 |
|
Ошибка: “Индекс за пределами диапазона”21.02.2013, 07:52. Показов 22000. Ответов 15
помогите пожалуйста
0 |
72 / 72 / 7 Регистрация: 14.03.2012 Сообщений: 201 |
|
21.02.2013, 08:00 |
2 |
Если разговор идет о массиве, то учитывайте, что индексация начинается с 0, а не с 1. Допустим массив из 5 элементов в представлении C# будет считаться как 0, 1, 2, 3, 4. Скорее всего ошибка в этом.
0 |
4088 / 3822 / 745 Регистрация: 18.05.2010 Сообщений: 9,331 Записей в блоге: 11 |
|
21.02.2013, 08:09 |
3 |
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. В массиве, например, всего 3 элемента, а вы пытаетесь получить пятый элемент.
0 |
1 / 1 / 0 Регистрация: 19.02.2013 Сообщений: 24 |
|
21.02.2013, 08:16 [ТС] |
4 |
извините но я новичок и вас немножко на понял dataGridView1[0, i].Value = x.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(); вы обращаетесь к первому столбцу и первой строке
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 |
|||
0 |
sashk0 72 / 72 / 7 Регистрация: 14.03.2012 Сообщений: 201 |
||||
21.02.2013, 08:48 |
9 |
|||
Судя по коду в dataGridView всего лишь одна строка, i++ нет смысла использовать, т.к. будет только одна итерация.
0 |
73 / 73 / 3 Регистрация: 04.09.2012 Сообщений: 170 |
|
21.02.2013, 08:52 |
10 |
Судя по коду в 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() И вообще тогда код исправить на этот:
Вместо
При этом каждую итерацию в цикле будет добавляться новая строка в dataGridView1 в самый конец. В результате будет столько строк, сколько итераций в цикле.
0 |
1 / 1 / 0 Регистрация: 19.02.2013 Сообщений: 24 |
|
21.02.2013, 09:03 [ТС] |
13 |
Здесь выходит только один столбец
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 |
Большое спасибо за помощь!!! Не по теме: Для этого есть специальная кнопочка
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. Качаем программу и устанавливаем ее. Скачали? Вы увидите вот такой файл.
Запустим его и увидим вот такое окно. Пока не будем обращать внимание что там написано, к этому вопросу вернемся попозже. Нажимаем просто кнопку «ДА»
Дальше увидим окно, в котором нас просят выбрать папку для того, чтобы распаковать файлы. Просто выбираем любую папку, нажав кнопку «Обзор», после того как путь выбран, нажимаем «ОК»
Дальше видим окно, сообщающее нам об удачной распаковки наших файлов, нажимаем «OK»
Теперь переходим в папку с распакованными файлами. В этой папке мы видим 3 файла, но нам интересны только два, это SSCERuntime_x64-RUS.msi и SSCERuntime_x86-RUS.msi
Теперь дальнейшие шаги зависят от того, какая у Вас разрядность Windows. Разрядность можно посмотреть так: нажимаете на «Мой компьютер» правой кнопкой и нажимаете кнопку «Свойства»
И тут смотрим, какая у Вас разрядность Windows. У меня 32х разрядная.
Теперь приступим к самой установке SSCERuntime-RUS. Если у Вас 32х разрядная Windows, то Вам следует запустить SSCERuntime_x86-RUS.msi. Если у Вас 64х разрядная Windows, то Вам следует запустить SSCERuntime_x86-RUS.msi, а после Вам нужно будет установить и SSCERuntime_x64-RUS.msi, ПОСЛЕДОВАТЕЛЬНОСТЬ НАРУШАТЬ НЕЛЬЗЯ!
Предположим, что у Вас как и у меня 32х разрядная приступим к установке. Запускаем SSCERuntime_x86-RUS.msi и видим вот такое окно приветствия, просто нажимаем «Далее»
Теперь мы видим окно с условиями лицензионного соглашения. Ставим точку на пункт «Я принимаю условия лицензионного соглашения» и нажимаем «Далее»
Теперь выбираем путь, куда будет произведена установка, я оставлю по умолчанию, просто нажму «Установить»
Теперь наблюдаем процесс установки
По окончанию установки нажимаем «Готово»
Все, теперь снова пробуем запускать наш Декларант-Алко. Все удачно запускается!
Ну вот и все, надеюсь я помог Вам победить ошибку: Необрабатываемое исключение в приложении. При нажатии кнопки «Продолжить» приложение проигнорирует ошибку и попытается продолжить работу. При нажатии кнопки «Выход» приложение немедленно завершит работу. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index.
Если у Вас остались вопросы пишите их в комментариях! Всем удачи и добра!