- Индекс был вне досягаемости. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс" как это решить?
Доброе утро эксперты не могли бы вы помочь мне в этой проблеме я все еще новичок в программировании
У меня есть загруженные данные на моем Datagridview. Я пытаюсь экспортировать выбранную строку данных, которая может быть экспортирована только видимым столбцом, но я получил эту ошибку "индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс".
на этой линии
.Cells(I + 2, curCol + 1).value = DataGridView1(j,DataGridView1.SelectedRows(I).Index).Value.ToString()
Private Sub Exportonlyvisiblecolumn2() Dim rowsTotal, colsTotal As Short Dim I, j, iC As Short System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor Dim xlApp As New Excel.Application Dim SelectedRowCount As Integer = DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected) Try Dim excelBook As Excel.Workbook = xlApp.Workbooks.Add Dim excelWorksheet As Excel.Worksheet = CType(excelBook.Worksheets(1), Excel.Worksheet) xlApp.Visible = True rowsTotal = DataGridView1.RowCount - 1 colsTotal = DataGridView1.Columns.Count - 1 With excelWorksheet .Cells.Select() .Cells.Delete() Dim curCol As Short = 0 For iC = 0 To colsTotal If DataGridView1.Columns(iC).Visible Then 'Headers .Cells(1, curCol + 1).Value = DataGridView1.Columns(iC).HeaderText curCol += 1 End If Next For I = 0 To SelectedRowCount 'rowsTotal 'left to right curCol = 0 For j = 0 To colsTotal If DataGridView1.Columns(j).Visible Then 'top to bottom .Cells(I + 2, curCol + 1).value = DataGridView1(j, DataGridView1.SelectedRows(I).Index).Value.ToString() '<----- Throw exeption curCol += 1 End If Next Next End With Catch ex As Exception MessageBox.Show(ex.Message) MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace) Finally 'RELEASE ALLOACTED RESOURCES System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default xlApp = Nothing End Try End Sub
Что я уже пробовал:
Я обнаружил, что цикл for продолжает зацикливаться, когда я попытался добавить addwatch1 значение I = 1 и значение j = 4, и это является причиной ошибки "индекс был вне диапазона", можете ли вы помочь мне решить эту проблему? Я пытался положить под выход между двумя далее и ошибка не появляется Есть ли лучший способ решить эту проблему? новичку в программировании нужен ваш совет и помощь
For I = 0 To SelectedRowCount 'rowsTotal 'left to right curCol = 0 For j = 0 To colsTotal If DataGridView1.Columns(j).Visible Then 'top to bottom .Cells(I + 2, curCol + 1).value = DataGridView1(j, DataGridView1.SelectedRows(I).Index).Value.ToString() '<----- Throw exeption curCol += 1 End If Next Next