Goran Bibic Ответов: 1

Ошибка в моем приложении...index column negativecsome help?


+		$exception	{"Index was out of range. Must be non-negative and less than the size of the collection.\r\nParameter name: index"}	System.ArgumentOutOfRangeException


Ошибка здесь

row = (DataGridViewRow)roba_uslugeDataGridView.SelectedRows[i].Clone();
               int intColIndex = 0;


Какая-то помощь?

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

private void roba_uslugeDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = new DataGridViewRow();

            for (int i = 0; i < roba_uslugeDataGridView.Rows.Count; i++)
            {

                


                row = (DataGridViewRow)roba_uslugeDataGridView.SelectedRows[i].Clone();
                int intColIndex = 0;
               
                foreach (DataGridViewCell cell in roba_uslugeDataGridView.SelectedRows[i].Cells)
                {


                    var ColIndex = dataGridView1.Rows.Add();
                    dataGridView1.Rows[intColIndex].Cells["redni_broj"].Value = intColIndex + 1;
                    dataGridView1.Rows[intColIndex].Cells["bar_kod"].Value = cell.Value.ToString();
                    dataGridView1.Rows[intColIndex].Cells["sifra"].Value = cell.Value;
                    dataGridView1.Rows[intColIndex].Cells["naziv_artikla"].Value = cell.Value;
                    dataGridView1.Rows[intColIndex].Cells["cijena"].Value = cell.Value;
                    dataGridView1.Rows[intColIndex].Cells["kolicina"].Value = "1";


                    foreach (DataGridViewRow g1 in dataGridView1.Rows)
                    {


                        g1.Cells["ukupno"].Value = (Convert.ToDouble(g1.Cells["kolicina"].Value) * Convert.ToDouble(g1.Cells["cijena"].Value)).ToString("0.00");

                    }


                    row.Cells[intColIndex].Value = cell.Value;
                    intColIndex++;
                }
                dataGridView1.Rows.Add(row);
            }
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.Refresh();

        }

1 Ответов

Рейтинг:
5

OriginalGriff

Просто: не все строки выбраны.
i варьируется от 0 до количества строк в DGV. Если не выбраны все строки, это всегда будет больше, чем количество элементов в коллекции SelectedRows, и вы всегда будете получать исключение.


Goran Bibic

Хорошо. Рекомандиотон? Решение? Помогите

OriginalGriff

Как я могу это сделать? Я понятия не имею, почему вы используете весь DGV для своего цикла и выбор для доступа. Я думаю, что вам нужно сесть и подумать о том, что именно вы пытаетесь сделать (еще одна вещь, которую мы не знаем), прежде чем вы начнете искать решения!

Goran Bibic

Нужно скопировать строку из одного datagridview в другой

OriginalGriff

Ну и что?
И какое отношение это имеет к проблеме, которую вы описываете? И цикл, и залог, в котором возникает ошибка, используют один и тот же DGV!

Richard Deeming

Если вы хотите клонировать выбранные строки:
Заменять:

i < roba_uslugeDataGridView.Rows.Count

с:
i < roba_uslugeDataGridView.SelectedRows.Count


Если вы хотите клонировать все строки:
Заменять:
row = (DataGridViewRow)roba_uslugeDataGridView.SelectedRows[i].Clone();

с:
row = (DataGridViewRow)roba_uslugeDataGridView.Rows[i].Clone();

Goran Bibic

Спасибо. Решенный

OriginalGriff

Всегда пожалуйста!