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

Я пытаюсь добавить данные по одной строке в datagridview, вот мой код, и он говорит: "Индекс был вне пределов досягаемости. Должен быть неотрицательным и меньше, чем размер коллекции имя параметра: index "что это значит? есть ли какие-либо проблемы в моем коде

String Sqlstr2 = "select ItemName from Item where ItemID = '" + tbItemID.Text + "'";
db.DataRead(Sqlstr2);
string ItemName = db.dr["ItemName"].ToString(); 

DataGridView dataGridView1 = new DataGridView();

dataGridView1.Columns[0].Name = "ItemID";
dataGridView1.Columns[1].Name = "ItemName";
dataGridView1.Columns[2].Name = "Qty";
dataGridView1.Columns[3].Name = "UnitPrice";
dataGridView1.Columns[4].Name = "Amount";

string firstColum = tbItemID.Text;
string secondColum = ItemName;
string thirdColum = tbQuantity.Text;
string fourthColum = Convert.ToString(UnitPrice);
string fifthColum = Convert.ToString(sum);

string[] row = new string[]{ firstColum, secondColum, thirdColum, fourthColum, fifthColum };
dataGridView1.Rows.Add(row);

Ответ 1

Вы не добавляете столбцы в свой DataGridView

DataGridView dataGridView1 = new DataGridView();//Create new grid

dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 

Теперь понятно, почему вы получаете исключение?

Добавьте эту строку, прежде чем использовать столбцы, чтобы исправить ошибку.

dataGridView1.ColumnCount = 5;

Ответ 2

Ошибка говорит: "Индекс выходит за пределы диапазона". Это означает, что вы пытались проиндексировать объект со значением, которое недействительно. Если у вас две книги, и я прошу вас дать мне свою третью книгу, вы будете смотреть на меня смешно. Это компьютер, который смотрит на тебя смешно. Вы сказали - "создать коллекцию". Так оно и было. Но изначально коллекция пуста: в ней нет ничего - у нее нет места для хранения чего-либо. "У него нет рук".

Затем вы сказали: "Первый элемент коллекции теперь" ItemID ". И компьютер говорит:" Мне никогда не просили создать пространство для "первого элемента" ". У меня нет рук, чтобы держать этот предмет, который вы мне даете.

С точки зрения вашего кода вы создали представление, но никогда не указывали размер. Вам нужно

dataGridView1.ColumnCount = 5;

Перед попыткой доступа к любым столбцам. Изменить

DataGridView dataGridView1 = new DataGridView();

dataGridView1.Columns[0].Name = "ItemID";

к

DataGridView dataGridView1 = new DataGridView();
dataGridView1.ColumnCount = 5;
dataGridView1.Columns[0].Name = "ItemID";

См. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columncount.aspx

Ответ 3

что это значит? есть ли какие-либо проблемы в моем коде

Это означает, что вы получаете доступ к местоположению или индексу, который отсутствует в коллекции.

Чтобы найти это, убедитесь, что у вашего Gridview есть 5 столбцов, поскольку вы используете его 5-й столбец по этой строке

dataGridView1.Columns[4].Name = "Amount";

Вот изображение, которое показывает элементы массива. Поэтому, если ваш gridview имеет меньше столбца, а затем (index + 1), к которому вы обращаетесь к нему, возникает это исключение.

enter image description here

Ответ 4

dataGridView1.Columns, вероятно, имеет длину менее 5. Доступ к dataGridView1.Columns[4] будет за пределами списка.

Ответ 5

Эта ошибка возникает, когда вы включили пейджинг в режиме Grid. Если вы хотите удалить запись из сетки, вам нужно сделать что-то вроде этого.

int index = Convert.ToInt32(e.CommandArgument);
int i = index % 20;
// Here 20 is my GridView Page Size.
GridViewRow row = gvMainGrid.Rows[i];
int id = Convert.ToInt32(gvMainGrid.DataKeys[i].Value);
new GetData().DeleteRecord(id);
GridView1.DataSource = RefreshGrid();
GridView1.DataBind();

Надеюсь, что это ответит на вопрос.